urcu.git
15 years agoupdate readme
Mathieu Desnoyers [Thu, 8 Oct 2009 05:10:26 +0000 (01:10 -0400)] 
update readme

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate configure.ac
Mathieu Desnoyers [Thu, 8 Oct 2009 05:04:54 +0000 (01:04 -0400)] 
Update configure.ac

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoadd CONFIG_HAVE_FENCE on x86's newer than i586
Mathieu Desnoyers [Thu, 8 Oct 2009 04:56:59 +0000 (00:56 -0400)] 
add CONFIG_HAVE_FENCE on x86's newer than i586

Patch originally from Pierre-Marc Fournier, modified.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate 386 cmpxchg support
Mathieu Desnoyers [Thu, 8 Oct 2009 04:44:21 +0000 (00:44 -0400)] 
Update 386 cmpxchg support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd compatibility support for older intel cpus
Mathieu Desnoyers [Thu, 8 Oct 2009 03:48:37 +0000 (23:48 -0400)] 
Add compatibility support for older intel cpus

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRestrict supported arch ot P6+ on Intel x86 32.
Mathieu Desnoyers [Thu, 8 Oct 2009 02:17:49 +0000 (22:17 -0400)] 
Restrict supported arch ot P6+ on Intel x86 32.

For now.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate README
Mathieu Desnoyers [Thu, 8 Oct 2009 02:08:22 +0000 (22:08 -0400)] 
Update README

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRemove dependency on m4 from configure.ac
Mathieu Desnoyers [Thu, 8 Oct 2009 01:33:58 +0000 (21:33 -0400)] 
Remove dependency on m4 from configure.ac

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoremove dependency on autotools 2.63 (unneeded)
Mathieu Desnoyers [Wed, 7 Oct 2009 23:22:59 +0000 (19:22 -0400)] 
remove dependency on autotools 2.63 (unneeded)

Tested with autotools 2.13.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agofix api.h generation on x86 and powerpc
Pierre-Marc Fournier [Wed, 7 Oct 2009 21:45:40 +0000 (17:45 -0400)] 
fix api.h generation on x86 and powerpc

Signed-off-by: Pierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate urcutorture to include arch.h
Mathieu Desnoyers [Wed, 7 Oct 2009 21:29:23 +0000 (17:29 -0400)] 
update urcutorture to include arch.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate readme
Mathieu Desnoyers [Wed, 7 Oct 2009 21:27:37 +0000 (17:27 -0400)] 
update readme

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate api gcc in tests
Mathieu Desnoyers [Wed, 7 Oct 2009 21:26:09 +0000 (17:26 -0400)] 
Update api gcc in tests

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoMake bootstrap executable
Mathieu Desnoyers [Wed, 7 Oct 2009 21:17:41 +0000 (17:17 -0400)] 
Make bootstrap executable

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoconvert to autotools
Pierre-Marc Fournier [Wed, 7 Oct 2009 21:16:24 +0000 (17:16 -0400)] 
convert to autotools

Remove the old build system.
Rename arch_uatomic*.h to uatomic_arch.h, to avoid conflits with
non-generated arch_*.h.

Signed-off-by: Pierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoFix tests makefile
Mathieu Desnoyers [Wed, 7 Oct 2009 16:44:32 +0000 (12:44 -0400)] 
Fix tests makefile

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agos390: Add uatomic_set(), uatomic_read(), uatomic_add(), uatomic_cmpxchg()
Jan Blunck [Tue, 6 Oct 2009 10:31:41 +0000 (12:31 +0200)] 
s390: Add uatomic_set(), uatomic_read(), uatomic_add(), uatomic_cmpxchg()

Mathieu needs atomic cmpxchg and add for all architectures.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agourcu-pointer: add more type checking v0.2.2
Mathieu Desnoyers [Mon, 5 Oct 2009 22:05:31 +0000 (18:05 -0400)] 
urcu-pointer: add more type checking

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd type checking in urcu-pointer.h macros
Mathieu Desnoyers [Mon, 5 Oct 2009 19:29:09 +0000 (15:29 -0400)] 
Add type checking in urcu-pointer.h macros

Ensure we have type-checking around dynamic linking macro wrappers.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRemove rcu_publish_content()
Mathieu Desnoyers [Mon, 5 Oct 2009 19:04:01 +0000 (15:04 -0400)] 
Remove rcu_publish_content()

API phased-out. Cannot use call_rcu anyway.

Use rcu_xchg_pointer and synchronize_rcu or
rcu_xchg_pointer and call_rcu instead.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agotests: remove rcu_publish_content dependency
Mathieu Desnoyers [Mon, 5 Oct 2009 19:03:32 +0000 (15:03 -0400)] 
tests: remove rcu_publish_content dependency

API phased-out.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agorculist: include correct dependencies v0.2.1
Mathieu Desnoyers [Thu, 1 Oct 2009 22:19:25 +0000 (18:19 -0400)] 
rculist: include correct dependencies

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-bp: use mremap
Mathieu Desnoyers [Thu, 1 Oct 2009 22:12:20 +0000 (18:12 -0400)] 
urcu-bp: use mremap

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-bp: New "bulletproof" RCU library flavor
Mathieu Desnoyers [Thu, 1 Oct 2009 20:31:23 +0000 (16:31 -0400)] 
urcu-bp: New "bulletproof" RCU library flavor

Slower read-side/write-side, but do not require neither of:
urcu_init()
rcu_register_thread()
rcu_unregister_thread()

It is signal safe.

Specialized for the UST LTTng tracer port.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd missing system.h from make install v0.2
Mathieu Desnoyers [Thu, 1 Oct 2009 14:14:38 +0000 (10:14 -0400)] 
Add missing system.h from make install

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-pointer: create specific objects and headers to deal with RCU pointers
Mathieu Desnoyers [Thu, 1 Oct 2009 13:48:35 +0000 (09:48 -0400)] 
urcu-pointer: create specific objects and headers to deal with RCU pointers

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd test for rcu_assign_pointer()
Mathieu Desnoyers [Thu, 1 Oct 2009 02:29:44 +0000 (22:29 -0400)] 
Add test for rcu_assign_pointer()

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoFix rcu_assign_pointer() dynamic linking behavior
Mathieu Desnoyers [Thu, 1 Oct 2009 02:28:47 +0000 (22:28 -0400)] 
Fix rcu_assign_pointer() dynamic linking behavior

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agouserspace-rcu formal model removal v0.1
Mathieu Desnoyers [Tue, 29 Sep 2009 20:37:07 +0000 (16:37 -0400)] 
userspace-rcu formal model removal

For packaging. Moved to formal-model branch.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate formal model from local copy
Mathieu Desnoyers [Tue, 29 Sep 2009 20:36:20 +0000 (16:36 -0400)] 
Update formal model from local copy

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRemove ifndef for API_H
Mathieu Desnoyers [Tue, 29 Sep 2009 19:54:15 +0000 (15:54 -0400)] 
Remove ifndef for API_H

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd build support for ppc when $HOSTTYPE is "ppc"
Jon Bernard [Tue, 29 Sep 2009 19:22:54 +0000 (15:22 -0400)] 
Add build support for ppc when $HOSTTYPE is "ppc"

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoSeparate arch_uatomic*.h from arch*.h
Mathieu Desnoyers [Tue, 29 Sep 2009 15:29:27 +0000 (11:29 -0400)] 
Separate arch_uatomic*.h from arch*.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate tests api*.h
Mathieu Desnoyers [Tue, 29 Sep 2009 03:09:25 +0000 (23:09 -0400)] 
Update tests api*.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAlign registry data on cache line size
Mathieu Desnoyers [Tue, 29 Sep 2009 03:34:52 +0000 (23:34 -0400)] 
Align registry data on cache line size

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agodefine CACHE_LINE_SIZE in arch_*.h
Mathieu Desnoyers [Tue, 29 Sep 2009 03:32:27 +0000 (23:32 -0400)] 
define CACHE_LINE_SIZE in arch_*.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agocompiler.h: use stddef.h for offsetof
Mathieu Desnoyers [Tue, 29 Sep 2009 03:25:15 +0000 (23:25 -0400)] 
compiler.h: use stddef.h for offsetof

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate .gitignore
Mathieu Desnoyers [Tue, 29 Sep 2009 03:23:11 +0000 (23:23 -0400)] 
Update .gitignore

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-qsbr: implement list_move algorithm
Mathieu Desnoyers [Tue, 29 Sep 2009 03:15:21 +0000 (23:15 -0400)] 
urcu-qsbr: implement list_move algorithm

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu (mb/signal): fix list move implementation
Mathieu Desnoyers [Tue, 29 Sep 2009 03:07:36 +0000 (23:07 -0400)] 
urcu (mb/signal): fix list move implementation

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu (mb/signal): list move
Mathieu Desnoyers [Tue, 29 Sep 2009 02:51:21 +0000 (22:51 -0400)] 
urcu (mb/signal): list move

Do no wait after a single thread at a time. When threads are Q.S., move them to
a separate list.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agolist.h: add list_move
Mathieu Desnoyers [Tue, 29 Sep 2009 02:20:03 +0000 (22:20 -0400)] 
list.h: add list_move

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu (signal): export urcu_init for early constructor initialization
Mathieu Desnoyers [Tue, 29 Sep 2009 00:22:41 +0000 (20:22 -0400)] 
urcu (signal): export urcu_init for early constructor initialization

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: use list instead of array for registry
Mathieu Desnoyers [Tue, 29 Sep 2009 00:16:15 +0000 (20:16 -0400)] 
urcu-defer: use list instead of array for registry

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-qsbr: Add list sanity check at lib exit
Mathieu Desnoyers [Tue, 29 Sep 2009 00:15:29 +0000 (20:15 -0400)] 
urcu-qsbr: Add list sanity check at lib exit

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-qsbr: use linked list instead of array for registry
Mathieu Desnoyers [Mon, 28 Sep 2009 23:55:42 +0000 (19:55 -0400)] 
urcu-qsbr: use linked list instead of array for registry

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu (signal/mb): move thread checks outside lock
Mathieu Desnoyers [Mon, 28 Sep 2009 23:54:38 +0000 (19:54 -0400)] 
urcu (signal/mb): move thread checks outside lock

Done on local variables, no need to lock.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu (signal/mb): use linked list instead of array for registry.
Mathieu Desnoyers [Mon, 28 Sep 2009 23:44:36 +0000 (19:44 -0400)] 
urcu (signal/mb): use linked list instead of array for registry.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate list, rculist and hlist
Mathieu Desnoyers [Mon, 28 Sep 2009 23:04:01 +0000 (19:04 -0400)] 
Update list, rculist and hlist

- rculist : license ok
- list : fix list del

Fix rcutorture api.h implementations to use non-GPL lists.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd urcu list and list
Mathieu Desnoyers [Mon, 28 Sep 2009 22:43:56 +0000 (18:43 -0400)] 
Add urcu list and list

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoCleanup headers
Mathieu Desnoyers [Mon, 28 Sep 2009 19:54:13 +0000 (15:54 -0400)] 
Cleanup headers

* atomic_ -> uatomic (to remove namespace clash with libkcompat)
* moved arch.h, compiler.h, arch_uatomic.h to
  /usr/include/urcu/

to make sure we do not pollute system headers.

Also add call_rcu() documentation to README.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd missing urcu-defer.{so,h} and urcu-defer-static.h
Mathieu Desnoyers [Mon, 28 Sep 2009 14:45:23 +0000 (10:45 -0400)] 
Add missing urcu-defer.{so,h} and urcu-defer-static.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoDocument call_rcu() usage
Mathieu Desnoyers [Sun, 27 Sep 2009 21:26:39 +0000 (17:26 -0400)] 
Document call_rcu() usage

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd missing rcu_cmpxchg_pointer define
Mathieu Desnoyers [Sun, 27 Sep 2009 03:47:21 +0000 (23:47 -0400)] 
Add missing rcu_cmpxchg_pointer define

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd multiple reader queues to futex model urcu/futex
Mathieu Desnoyers [Sat, 26 Sep 2009 12:19:26 +0000 (08:19 -0400)] 
Add multiple reader queues to futex model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoCleanup promela code for wakeup verif
Mathieu Desnoyers [Sat, 26 Sep 2009 12:13:20 +0000 (08:13 -0400)] 
Cleanup promela code for wakeup verif

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRemove stale file
Mathieu Desnoyers [Sat, 26 Sep 2009 07:05:05 +0000 (03:05 -0400)] 
Remove stale file

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd multicoreverif paper ticketlock and spinlock models
Mathieu Desnoyers [Sat, 26 Sep 2009 06:53:44 +0000 (02:53 -0400)] 
Add multicoreverif paper ticketlock and spinlock models

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd futex wakeup spin model
Mathieu Desnoyers [Sat, 26 Sep 2009 06:51:04 +0000 (02:51 -0400)] 
Add futex wakeup spin model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd futex support to accelerate synchronize_rcu() on UP
Mathieu Desnoyers [Fri, 25 Sep 2009 21:49:31 +0000 (17:49 -0400)] 
Add futex support to accelerate synchronize_rcu() on UP

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: fix futex wakeup value urcu/busyloop
Mathieu Desnoyers [Thu, 24 Sep 2009 00:55:52 +0000 (20:55 -0400)] 
urcu-defer: fix futex wakeup value

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRemove extra LDFLAGS from makefile
Mathieu Desnoyers [Thu, 24 Sep 2009 00:18:28 +0000 (20:18 -0400)] 
Remove extra LDFLAGS from makefile

> cc: -lpthread: linker input file unused because linking not done

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd missing include compiler.h
Mathieu Desnoyers [Thu, 24 Sep 2009 00:16:14 +0000 (20:16 -0400)] 
Add missing include compiler.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agorcu torture and api.h: remove duplicated atomic primitives
Mathieu Desnoyers [Thu, 24 Sep 2009 00:10:51 +0000 (20:10 -0400)] 
rcu torture and api.h: remove duplicated atomic primitives

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agotest_atomic: test for byte/short atomic support
Mathieu Desnoyers [Thu, 24 Sep 2009 00:00:58 +0000 (20:00 -0400)] 
test_atomic: test for byte/short atomic support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoppc atomic: fix atomic_dec/inc
Mathieu Desnoyers [Wed, 23 Sep 2009 23:23:48 +0000 (19:23 -0400)] 
ppc atomic: fix atomic_dec/inc

Only require 1 arg.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: remove dependency on linux/futex.h
Mathieu Desnoyers [Wed, 23 Sep 2009 23:21:56 +0000 (19:21 -0400)] 
urcu-defer: remove dependency on linux/futex.h

> cc -fPIC -Wall -I. -O2 -g -lpthread -c -o urcu-defer.o `echo urcu-defer.c urcu-defer.h | sed 's/[^ ]*\.h//g'`
> In file included from urcu-defer.c:31:
> /usr/include/linux/futex.h:96: error: expected ‘)’ before ‘*’ token
> /usr/include/linux/futex.h:100: error: expected ‘)’ before ‘*’ token

Seems broken on ppc. Just for two defines, it's not worth depending on it.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu: Move urcu_init within ifdef
Mathieu Desnoyers [Wed, 23 Sep 2009 23:18:06 +0000 (19:18 -0400)] 
urcu: Move urcu_init within ifdef

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoatomic ppc: fix missing casts and inline
Mathieu Desnoyers [Wed, 23 Sep 2009 23:16:57 +0000 (19:16 -0400)] 
atomic ppc: fix missing casts and inline

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: ensure callbacks will never be enqueued forever
Mathieu Desnoyers [Wed, 23 Sep 2009 22:29:21 +0000 (18:29 -0400)] 
urcu-defer: ensure callbacks will never be enqueued forever

Even if there are no further callbacks enqueued, ensure that after a 100ms
delay, the callback queue will be dealt with.

Required proper ordering of queue vs futex.

e.g.

 The idea is to perform the "check for empty queue" between the
&defer_thread_futex decrement and the test in wait_defer. It skips the
futex call and proceed if the list is non-empty.

As I am drilling into the problem, it looks very much like an attempt to
implement efficient wait queues in userspace based on sys_futex().

/*
 * Wake-up any waiting defer thread. Called from many concurrent
 * threads.
 */
static void wake_up_defer(void)
{
        if (unlikely(atomic_read(&defer_thread_futex) == -1)) {
                atomic_set(&defer_thread_futex, 0);
                futex(&defer_thread_futex, FUTEX_WAKE, 0,
                      NULL, NULL, 0);
        }
}

/*
 * Defer thread waiting. Single thread.
 */
static void wait_defer(void)
{
        atomic_dec(&defer_thread_futex);
        smp_mb();       /* Write futex before read queue */
        if (rcu_defer_num_callbacks()) {
                smp_mb();       /* Read queue before write futex */
                /* Callbacks are queued, don't wait. */
                atomic_set(&defer_thread_futex, 0);
        } else {
                smp_rmb();      /* Read queue before read futex */
                if (atomic_read(&defer_thread_futex) == -1)
                        futex(&defer_thread_futex, FUTEX_WAIT, -1,
                              NULL, NULL, 0);
        }
}

- call_rcu():
  * queue callbacks to perform
  * smp_mb()
  * wake_up_defer()

- defer thread:
  * for (;;)
    * wait_defer()
    * sleep 100ms (wait for more callbacks to be enqueued)
    * dequeue callbacks, execute them

The goal here is that if call_rcu() enqueues a callback (even if it
races with defer thread going to sleep), there should not be a
potentially infinite delay before it gets executed. Therefore, being
blocked in sys_futex while there is a callback to execute, without any
hope to be woken up unless another callback is queued, would not meet
that design requirement. I think that checking the number of queued
callbacks within wait_defer() as I propose here should address this
situation.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoFix urcu-defer: add missing brackets.
Mathieu Desnoyers [Wed, 23 Sep 2009 21:23:29 +0000 (17:23 -0400)] 
Fix urcu-defer: add missing brackets.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoCleanup: remove debug code form urcu-defer.c
Mathieu Desnoyers [Wed, 23 Sep 2009 17:34:31 +0000 (13:34 -0400)] 
Cleanup: remove debug code form urcu-defer.c

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoMove urcu_defer_queue to urcu-defer.c
Mathieu Desnoyers [Wed, 23 Sep 2009 17:21:45 +0000 (13:21 -0400)] 
Move urcu_defer_queue to urcu-defer.c

Too big to be inline.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: make call_rcu() energy efficient using futex()
Mathieu Desnoyers [Wed, 23 Sep 2009 17:14:34 +0000 (13:14 -0400)] 
urcu-defer: make call_rcu() energy efficient using futex()

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd offsetof to compiler.h
Mathieu Desnoyers [Wed, 23 Sep 2009 17:13:29 +0000 (13:13 -0400)] 
Add offsetof to compiler.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoppc atomic: Fix asm format.
Paul E. McKenney [Wed, 23 Sep 2009 07:09:59 +0000 (03:09 -0400)] 
ppc atomic: Fix asm format.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoadd rcu_cmpxchg_pointer
Mathieu Desnoyers [Tue, 22 Sep 2009 23:01:10 +0000 (19:01 -0400)] 
add rcu_cmpxchg_pointer

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoremove volatile from prototypes in atomic code
Mathieu Desnoyers [Tue, 22 Sep 2009 22:52:40 +0000 (18:52 -0400)] 
remove volatile from prototypes in atomic code

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate ppc atomic
Mathieu Desnoyers [Tue, 22 Sep 2009 22:51:21 +0000 (18:51 -0400)] 
update ppc atomic

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate x86 and ppc atomic ops
Mathieu Desnoyers [Tue, 22 Sep 2009 22:44:26 +0000 (18:44 -0400)] 
update x86 and ppc atomic ops

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd powerpc atomic operations
Mathieu Desnoyers [Tue, 22 Sep 2009 22:11:17 +0000 (18:11 -0400)] 
Add powerpc atomic operations

cmpxchg
atomic_add_return
atomic_sub_return
atomic_add
atomic_sub
atomic_inc
atomic_dec

(already had xchg)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate x86_64 cmpxchg
Mathieu Desnoyers [Tue, 22 Sep 2009 20:56:18 +0000 (16:56 -0400)] 
update x86_64 cmpxchg

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate atomic x86_64 cmpxchg
Mathieu Desnoyers [Tue, 22 Sep 2009 21:23:08 +0000 (17:23 -0400)] 
Update atomic x86_64 cmpxchg

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agomakefile update
Mathieu Desnoyers [Tue, 22 Sep 2009 21:20:56 +0000 (17:20 -0400)] 
makefile update

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd inc/dec x86 atomics
Mathieu Desnoyers [Tue, 22 Sep 2009 21:09:55 +0000 (17:09 -0400)] 
Add inc/dec x86 atomics

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate x86 atomic, add test atomic
Mathieu Desnoyers [Tue, 22 Sep 2009 20:41:24 +0000 (16:41 -0400)] 
update x86 atomic, add test atomic

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoextend x86 atomic operations
Mathieu Desnoyers [Tue, 22 Sep 2009 20:28:49 +0000 (16:28 -0400)] 
extend x86 atomic operations

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd missing files in make clean
Mathieu Desnoyers [Mon, 21 Sep 2009 16:26:16 +0000 (12:26 -0400)] 
Add missing files in make clean

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: remove unnecessary memory barrier
Mathieu Desnoyers [Sun, 20 Sep 2009 16:03:37 +0000 (12:03 -0400)] 
urcu-defer: remove unnecessary memory barrier

All synchronization between queue producer/consumer is performed by the write to
"head". Before this write, none of the queued data is visible from the consumer
point of view.

Therefore, just a single wmb() is required before writing to head to ensure
correct synchronization. This matches with the rmb() after reading head on the
consumer side.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: Add fast path for empty queues
Mathieu Desnoyers [Sun, 20 Sep 2009 15:39:30 +0000 (11:39 -0400)] 
urcu-defer: Add fast path for empty queues

defer_barrier does not need to call synchronize_rcu() when all queues are empty.
Skip the G.P. if this is the case.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-defer: cleanup debug code
Mathieu Desnoyers [Sun, 20 Sep 2009 15:18:23 +0000 (11:18 -0400)] 
urcu-defer: cleanup debug code

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoDeferral test update
Mathieu Desnoyers [Sun, 20 Sep 2009 02:23:11 +0000 (22:23 -0400)] 
Deferral test update

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agogeneric urcu deferral (call_rcu())
Mathieu Desnoyers [Sun, 20 Sep 2009 02:20:16 +0000 (22:20 -0400)] 
generic urcu deferral (call_rcu())

Found out a way to encode the queues so the standard scenario is to use a single
pointer per call_rcu().

Uses more space for:
- unaligned functions pointers.
- unaligned data pointers.
- function/data value : -2L. (this is arbitrary)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRename liburcu-reclaim to liburcu-defer
Mathieu Desnoyers [Sun, 20 Sep 2009 00:05:10 +0000 (20:05 -0400)] 
Rename liburcu-reclaim to liburcu-defer

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agourcu-reclaim cleanup
Mathieu Desnoyers [Sat, 19 Sep 2009 21:55:47 +0000 (17:55 -0400)] 
urcu-reclaim cleanup

Rename "reader" to "reclaimer", because urcu-reclaim keeps track of "reclaimer"
threads (rcu writers) and has its own reclaiming thread periodically performing
the batch reclamation.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoUpdate header heading
Mathieu Desnoyers [Sat, 19 Sep 2009 21:45:41 +0000 (17:45 -0400)] 
Update header heading

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoAdd rcu-reclaim.so library
Mathieu Desnoyers [Sat, 19 Sep 2009 21:28:06 +0000 (17:28 -0400)] 
Add rcu-reclaim.so library

Add "automated" RCU memory reclamation.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoadd static declarations
Mathieu Desnoyers [Sat, 19 Sep 2009 21:26:41 +0000 (17:26 -0400)] 
add static declarations

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoqsbr: Add write+read thread support to 32-bit QSBR
Mathieu Desnoyers [Fri, 18 Sep 2009 13:12:35 +0000 (09:12 -0400)] 
qsbr: Add write+read thread support to 32-bit QSBR

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoQSBR: Implement 2-phase grace period for 32-bit arch
Mathieu Desnoyers [Fri, 18 Sep 2009 13:05:03 +0000 (09:05 -0400)] 
QSBR: Implement 2-phase grace period for 32-bit arch

Ensures we never run in overflow on 32-bit arch.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
This page took 0.04089 seconds and 4 git commands to generate.