userspace-rcu.git
13 years agocall_rcu: use futex for wakeup scheme
Mathieu Desnoyers [Tue, 7 Jun 2011 04:16:00 +0000 (00:16 -0400)] 
call_rcu: use futex for wakeup scheme

If I remove the URCU_CALL_RCU_RT flag from the rbtree single writer
test, thus using the pthread_cond_signal mechanism, there is a huge
slowdown: without cpu affinity for the worker threads, it crawls to 129
updates/s (looks like mutex contention between the thread calling
call_rcu and the call_rcu thread). Adding CPU affinity to the per-cpu
call_rcu threads, I get 546 updates/s, which is slightly better (better
cache locality, and maybe the mutex contention is not as bad thanks to
the two threads sharing the same CPU).

So I decided to try replacing pthread_cond_wait/signal with my
futex-based implementation I use for the rest of the urcu lib: it has
the advantage of removing the mutex from the call_rcu() execution
entirely, sampling the "futex" variable without any mutex whatsoever for
the case where no wakeup is needed.

Disabling URCU_CALL_RCU_RT flag, with per-cpu affined call_rcu threads,
with my futex-based wakeup implementation, I get 55754 updates/s (even
better than with URCU_CALL_RCU_RT flag!).

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agocall_rcu: use cpu affinity for per-cpu call_rcu threads
Mathieu Desnoyers [Mon, 6 Jun 2011 21:24:42 +0000 (17:24 -0400)] 
call_rcu: use cpu affinity for per-cpu call_rcu threads

I played a bit with the call_rcu() implementation alongside with my
rbtree tests, and noticed the following:

If I use per-cpu call_rcu threads with URCU_CALL_RCU_RT flag, with one
updater thread only for my rbtree (no reader), I get 38365 updates/s.
If I add cpu affinity to these per-cpu call_rcu threads (I have prepared
a patch that does this), it jumps to 54219 updates/s.  So it looks like
keeping per-cpu affinity for the call_rcu thread is a good thing.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoDocument the new call_rcu() primitives.
Paul E. McKenney [Fri, 3 Jun 2011 16:49:21 +0000 (12:49 -0400)] 
Document the new call_rcu() primitives.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoMake defer_rcu() usable from library using multiple URCU implementations
Paul E. McKenney [Fri, 3 Jun 2011 16:47:56 +0000 (12:47 -0400)] 
Make defer_rcu() usable from library using multiple URCU implementations

[ Edit: minor tab to whitespace cleanup ]

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoAllow taking address of rcu_read_lock() and rcu_read_unlock()
Paul E. McKenney [Fri, 3 Jun 2011 16:44:50 +0000 (12:44 -0400)] 
Allow taking address of rcu_read_lock() and rcu_read_unlock()

Also incorporate README feedback from Mathieu and Josh.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoMap symbols to allow multiple RCU flavors to be used in one binary
Paul E. McKenney [Fri, 3 Jun 2011 16:43:17 +0000 (12:43 -0400)] 
Map symbols to allow multiple RCU flavors to be used in one binary

Probably need similar mapping for rcu_defer().  Definitely need
backwards-compatibility mapping for programs compiled against
old versions of the library.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoProvide pthread_atfork-friendly interfaces
Paul E. McKenney [Fri, 3 Jun 2011 16:42:00 +0000 (12:42 -0400)] 
Provide pthread_atfork-friendly interfaces

Provides call_rcu_before_fork() and call_rcu_after_fork_parent() to
go with the existing call_rcu_after_fork_child().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoAdd pkg-config files for all urcu libs
Yannick Brosseau [Wed, 1 Jun 2011 15:00:25 +0000 (11:00 -0400)] 
Add pkg-config files for all urcu libs

Signed-off-by: Yannick Brosseau <yannick.brosseau@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agouserspace-rcu tests: zero array before using
Colin McCabe [Wed, 11 May 2011 11:38:29 +0000 (07:38 -0400)] 
userspace-rcu tests: zero array before using

It seems like we need the test arrays to start out zeroed.

Without this patch, I get errors like this when running the tests:
test_urcu: test_urcu.c:201: test_array_alloc:
Assertion `test_array[index].a == 0xDEADBEEF || test_array[index].a ==
0' failed.

Signed-off-by: Colin McCabe <cmccabe@alumni.cmu.edu>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoarm: put CONFIG_RCU_ARM_HAVE_DMB in the global config.h
Jason Wessel [Wed, 4 May 2011 19:14:14 +0000 (15:14 -0400)] 
arm: put CONFIG_RCU_ARM_HAVE_DMB in the global config.h

Change CONFIG_ARM_HAVE_DMB to CONFIG_RCU_ARM_HAVE_DMB while at the
same time making it seen as a global setting in urch/config.h.

The initial ARM < v7 work missed this setting, which allowed the URCU
to package to build correctly, but exposed the memorry barriers
defines incorrectly for other applications using the URCU headers.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoCleanup: remove unused value warning
Mathieu Desnoyers [Mon, 21 Mar 2011 21:55:30 +0000 (17:55 -0400)] 
Cleanup: remove unused value warning

return value of cmpxchg is purposefully unused in
_cds_lfq_enqueue_rcu(). Cast it to (void) to remove the compiler
warning.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoProvide cleanup interfaces for per-CPU and per-thread call_rcu threads
Paul E. McKenney [Wed, 9 Mar 2011 02:51:54 +0000 (21:51 -0500)] 
Provide cleanup interfaces for per-CPU and per-thread call_rcu threads

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoMaintain list of struct call_rcu_data to keep valgrind happy.
Paul E. McKenney [Wed, 9 Mar 2011 02:50:26 +0000 (21:50 -0500)] 
Maintain list of struct call_rcu_data to keep valgrind happy.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoAdd call_rcu() interface
Paul E. McKenney [Wed, 9 Mar 2011 02:48:49 +0000 (21:48 -0500)] 
Add call_rcu() interface

Adds call_rcu(), with RCU threads to invoke the callbacks.  By default,
there will be one such RCU thread per process, created the first time
that call_rcu() is invoked.  On systems supporting sched_getcpu(), it
is possible to create one RCU thread per CPU by calling
create_all_cpu_call_rcu_data().

This version includes feedback from Mathieu Desnoyers.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoFix ppc asm syntax error.
Paul E. McKenney [Wed, 9 Mar 2011 02:37:43 +0000 (21:37 -0500)] 
Fix ppc asm syntax error.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoupdate version to 0.5.4 v0.5.4
Mathieu Desnoyers [Fri, 4 Mar 2011 17:33:20 +0000 (12:33 -0500)] 
update version to 0.5.4

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agourcu-bp: Update fork() handling
Mathieu Desnoyers [Fri, 4 Mar 2011 17:25:08 +0000 (12:25 -0500)] 
urcu-bp: Update fork() handling

Introduce

extern void rcu_bp_before_fork(void);
extern void rcu_bp_after_fork_parent(void);
extern void rcu_bp_after_fork_child(void);

to handle fork gracefully. These disable signals and hold the registry mutex
across forks.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoVersion 0.5.3 v0.5.3
Mathieu Desnoyers [Thu, 3 Mar 2011 21:08:21 +0000 (16:08 -0500)] 
Version 0.5.3

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoUpdate README for urcu-bp fork handling
Mathieu Desnoyers [Thu, 3 Mar 2011 16:49:06 +0000 (11:49 -0500)] 
Update README for urcu-bp fork handling

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoREADME: describe fork() interaction
Mathieu Desnoyers [Thu, 3 Mar 2011 15:05:48 +0000 (10:05 -0500)] 
README: describe fork() interaction

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agourcu-bp: no "need_mb" in distrust signal config
Mathieu Desnoyers [Thu, 3 Mar 2011 02:19:00 +0000 (21:19 -0500)] 
urcu-bp: no "need_mb" in distrust signal config

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoUpdate the README to change armv7l to arm
Jason Wessel [Mon, 28 Feb 2011 16:36:42 +0000 (11:36 -0500)] 
Update the README to change armv7l to arm

ARM v5 and ARM v6 are known to work using compiler barriers.

[ edit: add a missing comma while we are there ]

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoARM: use dmb for rmb and wmb in addition to mb
Mathieu Desnoyers [Mon, 28 Feb 2011 16:35:09 +0000 (11:35 -0500)] 
ARM: use dmb for rmb and wmb in addition to mb

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoAdd a test for the dmb instruction on ARM
Jason Wessel [Mon, 28 Feb 2011 16:34:10 +0000 (11:34 -0500)] 
Add a test for the dmb instruction on ARM

The dmb instruction is used to implement a memory barrier on modern
ARM hardware.  The older generations of processors which are included
in single processor systems can get by on the generic implementation
of the cmm_mb().  This will allow the user space rcu to work on many
other ARM systems.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agohange the arm headers to remove all the references to v7
Jason Wessel [Mon, 28 Feb 2011 16:33:42 +0000 (11:33 -0500)] 
hange the arm headers to remove all the references to v7

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoMake armv7l headers generic for the arm architecture
Jason Wessel [Mon, 28 Feb 2011 16:33:19 +0000 (11:33 -0500)] 
Make armv7l headers generic for the arm architecture

This commit simply moves the files named *armv7l* to *arm*

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agoURCU list: remove leftover namespace clash (list_t type removed)
Mathieu Desnoyers [Mon, 21 Feb 2011 21:17:44 +0000 (16:17 -0500)] 
URCU list: remove leftover namespace clash (list_t type removed)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agourcu_defer: update test programs (build fix)
Mathieu Desnoyers [Fri, 31 Dec 2010 17:54:52 +0000 (12:54 -0500)] 
urcu_defer: update test programs (build fix)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agorcu_defer test: handle error value
Mathieu Desnoyers [Fri, 31 Dec 2010 17:53:34 +0000 (12:53 -0500)] 
rcu_defer test: handle error value

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 years agourcu-defer: handle malloc error value
Mathieu Desnoyers [Fri, 31 Dec 2010 17:50:59 +0000 (12:50 -0500)] 
urcu-defer: handle malloc error value

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoVersion 0.5.2 v0.5.2
Mathieu Desnoyers [Fri, 19 Nov 2010 03:20:31 +0000 (22:20 -0500)] 
Version 0.5.2

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix get_cycles -> caa_get_cycles
Mathieu Desnoyers [Fri, 19 Nov 2010 03:18:42 +0000 (22:18 -0500)] 
Fix get_cycles -> caa_get_cycles

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoVersion 0.5.1 v0.5.1
Mathieu Desnoyers [Fri, 19 Nov 2010 02:51:16 +0000 (21:51 -0500)] 
Version 0.5.1

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoACCESS_ONCE should also have CMM_ prefix
Mathieu Desnoyers [Fri, 19 Nov 2010 02:47:14 +0000 (21:47 -0500)] 
ACCESS_ONCE should also have CMM_ prefix

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoLOAD_SHARED and STORE_SHARED should have CMM_ prefix
Mathieu Desnoyers [Fri, 19 Nov 2010 02:44:59 +0000 (21:44 -0500)] 
LOAD_SHARED and STORE_SHARED should have CMM_ prefix

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix CAA_CAA -> CAA
Mathieu Desnoyers [Fri, 19 Nov 2010 02:38:17 +0000 (21:38 -0500)] 
Fix CAA_CAA -> CAA

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix missing BITS_PER_LONG -> CAA_BITS_PER_LONG rename
Mathieu Desnoyers [Fri, 19 Nov 2010 02:35:41 +0000 (21:35 -0500)] 
Fix missing BITS_PER_LONG -> CAA_BITS_PER_LONG rename

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoupdate version to 0.5.0 v0.5.0
Mathieu Desnoyers [Thu, 18 Nov 2010 20:56:47 +0000 (15:56 -0500)] 
update version to 0.5.0

14 years agoRename all data structure with prefix cds_
David Goulet [Thu, 18 Nov 2010 20:48:01 +0000 (15:48 -0500)] 
Rename all data structure with prefix cds_

This is the third and last patch of the namespace refactoring.

The prefix cds_ stands for Concurrent Data Structure and is
use for queue, list, hlist and stack.

For RCU protected data strucutre, the prefix is also added but
the suffix _rcu is appended. This suffix indicate and RCU protection.

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRename all arch primitives with prefix caa_
David Goulet [Thu, 18 Nov 2010 20:46:38 +0000 (15:46 -0500)] 
Rename all arch primitives with prefix caa_

This is the second patch for reducing namespace pollution.
The caa_ prefix stands for Concurrent Architecture Abstraction.
Again, suggested by Mathieu Desnoyers and Paul E. Mckenney.

Every define, macro and function specific to the architecture
abstraction of liburcu is modified with that prefix

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRename all memory primitives with prefix cmm_
David Goulet [Thu, 18 Nov 2010 20:45:20 +0000 (15:45 -0500)] 
Rename all memory primitives with prefix cmm_

In order to not pollute the userspace namespace for application
using liburcu or any lib/apps linked with urcu, this patch if the
first of three major refactor for naming convention.

The cmm_ prefix is a short name for Concurrent Memory Model and was
suggested by Mathieu Desnoyers and Paul E. Mckenney. Every memory
primitives such as mb, wmb, rmb, and so on are renamed.

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd missing test binaries to .gitignore
David Goulet [Mon, 15 Nov 2010 19:12:00 +0000 (14:12 -0500)] 
Add missing test binaries to .gitignore

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd config.h and stamp-h2 to gitignore
David Goulet [Sat, 13 Nov 2010 14:30:04 +0000 (09:30 -0500)] 
Add config.h and stamp-h2 to gitignore

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd compiler barriers to read-side for mutex ordering
Mathieu Desnoyers [Sat, 6 Nov 2010 19:09:29 +0000 (15:09 -0400)] 
Add compiler barriers to read-side for mutex ordering

Ensure that mutex acquisition/release is not reordered wrt rcu read lock/unlock.
No impact in practice because pthreads lock/unlock primitives act as memory
barriers. But we should provide the same guarantees we are expecting from other
locking primitives, hence this modification.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix missing urcu_ref.h in Makefile.am v0.4.8
Mathieu Desnoyers [Fri, 24 Sep 2010 20:48:19 +0000 (16:48 -0400)] 
Fix missing urcu_ref.h in Makefile.am

The 0.4.7 tarball is missing 'urcu/urcu_ref.h', causing the following
error:

      CC     rculfqueue.lo
    In file included from rculfqueue.c:26:
    urcu/rculfqueue.h:26:22: error: urcu_ref.h: No such file or directory
    In file included from rculfqueue.c:26:
    urcu/rculfqueue.h:45: error: field â€˜ref’ has incomplete type
    In file included from rculfqueue.c:27:
    urcu/rculfqueue-static.h:29:27: error: urcu/urcu_ref.h: No such file or directory

Reported-by: Jon Bernard <jbernard@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoupdate version to 0.4.7 v0.4.7
Mathieu Desnoyers [Wed, 22 Sep 2010 20:08:47 +0000 (16:08 -0400)] 
update version to 0.4.7

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu lfstack: pop needs rcu read lock
Mathieu Desnoyers [Wed, 25 Aug 2010 15:16:34 +0000 (11:16 -0400)] 
urcu lfstack: pop needs rcu read lock

The pop side needs to hold the RCU read lock to deal with ABA problem.
The push side does not need to hold the RCU read lock because even if the next
item is changed to the same value initially read, the stack will still be
consistent.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agolfstack: simplification
Mathieu Desnoyers [Wed, 25 Aug 2010 14:14:19 +0000 (10:14 -0400)] 
lfstack: simplification

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agorculfstack: LGPL-ize
Mathieu Desnoyers [Sun, 22 Aug 2010 14:21:19 +0000 (10:21 -0400)] 
rculfstack: LGPL-ize

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agorculfqueue: LGPL-ize
Mathieu Desnoyers [Sun, 22 Aug 2010 13:21:58 +0000 (09:21 -0400)] 
rculfqueue: LGPL-ize

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoadd missing comment to wfstack.c
Mathieu Desnoyers [Sun, 22 Aug 2010 13:08:47 +0000 (09:08 -0400)] 
add missing comment to wfstack.c

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agowfstack: LGPL-ize
Mathieu Desnoyers [Sun, 22 Aug 2010 12:52:13 +0000 (08:52 -0400)] 
wfstack: LGPL-ize

Create wrapper symbols for LGPL linking.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agowfqueue: provide API for caller-locked dequeue
Mathieu Desnoyers [Sun, 22 Aug 2010 12:44:41 +0000 (08:44 -0400)] 
wfqueue: provide API for caller-locked dequeue

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoLGPL-ize wfqueue
Mathieu Desnoyers [Sun, 22 Aug 2010 12:34:03 +0000 (08:34 -0400)] 
LGPL-ize wfqueue

Provide the appropriate wrappers to ensure that non-LGPL applications can use
the half-blocking wait-free queue.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoWF queue cleanup
Mathieu Desnoyers [Wed, 18 Aug 2010 14:55:55 +0000 (10:55 -0400)] 
WF queue cleanup

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoWait-free stack: rcu-less implementation
Mathieu Desnoyers [Wed, 18 Aug 2010 14:55:14 +0000 (10:55 -0400)] 
Wait-free stack: rcu-less implementation

Don't have to hold a rcu read lock anymore. pop side is blocking and holds a
mutex.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoWait-free queue: wait-free enqueue, blocking dequeue without RCU dependency
Mathieu Desnoyers [Wed, 18 Aug 2010 14:18:58 +0000 (10:18 -0400)] 
Wait-free queue: wait-free enqueue, blocking dequeue without RCU dependency

Implementation better suited for supporting call_rcu().

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU lf queue/stack: update comments
Mathieu Desnoyers [Wed, 18 Aug 2010 13:16:08 +0000 (09:16 -0400)] 
RCU lf queue/stack: update comments

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoifdef C, wait-free stack adaptative pop wait
Mathieu Desnoyers [Tue, 13 Jul 2010 22:21:33 +0000 (18:21 -0400)] 
ifdef C, wait-free stack adaptative pop wait

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu static coding style fix (whitespace)
Mathieu Desnoyers [Tue, 13 Jul 2010 22:21:10 +0000 (18:21 -0400)] 
urcu static coding style fix (whitespace)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoCoding style fix
Mathieu Desnoyers [Tue, 13 Jul 2010 21:58:50 +0000 (17:58 -0400)] 
Coding style fix

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU wait-free stack: add _blocking in pop() primitive name
Mathieu Desnoyers [Tue, 13 Jul 2010 21:12:49 +0000 (17:12 -0400)] 
RCU wait-free stack: add _blocking in pop() primitive name

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU lock-free queue comment updates
Mathieu Desnoyers [Tue, 13 Jul 2010 21:12:13 +0000 (17:12 -0400)] 
RCU lock-free queue comment updates

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU wait-free enqueue/blocking dequeue queue
Mathieu Desnoyers [Tue, 13 Jul 2010 21:11:30 +0000 (17:11 -0400)] 
RCU wait-free enqueue/blocking dequeue queue

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd ifdef cond around headers
Mathieu Desnoyers [Tue, 13 Jul 2010 20:31:47 +0000 (16:31 -0400)] 
Add ifdef cond around headers

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU lock-free queue: don't hold RCU read lock across retry
Mathieu Desnoyers [Tue, 13 Jul 2010 15:59:55 +0000 (11:59 -0400)] 
RCU lock-free queue: don't hold RCU read lock across retry

Be nicer to grace periods.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRCU lock-free stack: don't hold read lock across retry
Mathieu Desnoyers [Tue, 13 Jul 2010 15:57:30 +0000 (11:57 -0400)] 
RCU lock-free stack: don't hold read lock across retry

Be nicer to grace-periods.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoWait-free push/Blocking pop stack: Update following Paul's review
Mathieu Desnoyers [Tue, 13 Jul 2010 15:53:30 +0000 (11:53 -0400)] 
Wait-free push/Blocking pop stack: Update following Paul's review

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd lock-free queue comments from Paul's review
Mathieu Desnoyers [Tue, 13 Jul 2010 15:53:16 +0000 (11:53 -0400)] 
Add lock-free queue comments from Paul's review

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd wait-free push/blocking pop stack
Mathieu Desnoyers [Tue, 13 Jul 2010 00:54:52 +0000 (20:54 -0400)] 
Add wait-free push/blocking pop stack

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoLock-free stack: add comments
Mathieu Desnoyers [Mon, 12 Jul 2010 16:29:11 +0000 (12:29 -0400)] 
Lock-free stack: add comments

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd lock-free RCU queue and stack
Mathieu Desnoyers [Mon, 12 Jul 2010 16:16:30 +0000 (12:16 -0400)] 
Add lock-free RCU queue and stack

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate version to 0.4.6 v0.4.6
Mathieu Desnoyers [Fri, 18 Jun 2010 16:47:46 +0000 (12:47 -0400)] 
Update version to 0.4.6

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate README for ARM support
Mathieu Desnoyers [Fri, 18 Jun 2010 16:47:24 +0000 (12:47 -0400)] 
Update README for ARM support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate version to 0.4.5 v0.4.5
Mathieu Desnoyers [Fri, 18 Jun 2010 16:38:39 +0000 (12:38 -0400)] 
Update version to 0.4.5

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate email address from @polymtl.ca to @efficios.com
Mathieu Desnoyers [Fri, 18 Jun 2010 16:35:26 +0000 (12:35 -0400)] 
Update email address from @polymtl.ca to @efficios.com

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoForce build failure on unknown architectures
Paul E. McKenney [Fri, 18 Jun 2010 16:26:20 +0000 (12:26 -0400)] 
Force build failure on unknown architectures

Create urcu/arch_unknown.h and urcu/uatomic_arch_unknown.h, which
contain only #error statements and explanatory comments.  This forces
build failures on unrecognized architectures in preference to trying
to guess at what operations might be safe on such architectures.

One other semi-feasible alternative is to use hashed arrays of locks
that are acquired with signals disabled.  However, this seems a bit
too ornate, especially for architectures for which the gcc __sync_
primitives work correctly.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd native ARM port for armv7l
Paul E. McKenney [Fri, 18 Jun 2010 16:25:08 +0000 (12:25 -0400)] 
Add native ARM port for armv7l

Add native support for armv7l.  Other variants of ARM will likely require
separate ports.  The gcc __sync_ approach works back to at least 2.6.15
kernels.

As suggested by Paolo Bonzini, defer the definition of CACHE_LINE_SIZE
to arch_generic.h.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd ia64 architecture based on gcc primitives
Paul E. McKenney [Fri, 18 Jun 2010 16:06:19 +0000 (12:06 -0400)] 
Add ia64 architecture based on gcc primitives

This of course assumes that ia64 gcc correctly implements the various
__sync_ primitives.  ;-)

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd header files supporting gcc __sync_ primitives
Paul E. McKenney [Fri, 18 Jun 2010 16:05:12 +0000 (12:05 -0400)] 
Add header files supporting gcc __sync_ primitives

Add a urcu/arch_gcc.h and urcu/uatomic_arch_gcc.h whose primitives are
based on the gcc __sync_ primitives.  This should be usable for all
systems that have correctly implemented __sync_ primitives, which sadly
does not include all combinations of systems and compilers.  In addition,
specific systems may gain higher performance with hand-coded primitives.
Nevertheless, this is nice for getting a new architecture up and running
quickly.

As suggested by Paolo Bonzini, defer the definition of mb() to the common
arch_generic.h file, and also defer the uatomic*() primitives to
uatomic_generic.h.

[Mathieu : fixed arch_gcc.h header which contained incorrect arch_unknown.h in
           header.]

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd test cycles per loop
Mathieu Desnoyers [Sun, 13 Jun 2010 23:55:41 +0000 (19:55 -0400)] 
Add test cycles per loop

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoAdd uatomic test to make check
Mathieu Desnoyers [Sun, 13 Jun 2010 22:44:04 +0000 (18:44 -0400)] 
Add uatomic test to make check

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoRemove unused sync_core() definitions
Paul E. McKenney [Sun, 13 Jun 2010 21:30:04 +0000 (17:30 -0400)] 
Remove unused sync_core() definitions

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate version to 0.4.4 v0.4.4
Mathieu Desnoyers [Thu, 20 May 2010 22:12:11 +0000 (18:12 -0400)] 
Update version to 0.4.4

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix powerpc uatomic 4-byte cmpxchg (cmpd -> cmpw)
Mathieu Desnoyers [Thu, 20 May 2010 22:09:20 +0000 (18:09 -0400)] 
Fix powerpc uatomic 4-byte cmpxchg (cmpd -> cmpw)

Necessary to make it work on 32-bit only powerpc architectures. Was using the
64-bit comparison rather than the 32-bit comparison for 4-byte cmpxchg.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu-qsbr: use same ongoing helper for 32 and 64 bits
Mathieu Desnoyers [Fri, 14 May 2010 00:15:10 +0000 (20:15 -0400)] 
urcu-qsbr: use same ongoing helper for 32 and 64 bits

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years ago"make check" runs the test suite
Giuseppe Scrivano [Tue, 20 Apr 2010 13:08:16 +0000 (09:08 -0400)] 
"make check" runs the test suite

a trivial patch to enable the Makefile "check" rule.

Signed-off-by: Giuseppe Scrivano <gscrivano@gnu.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoSimplify qsbr online condition
Mathieu Desnoyers [Wed, 14 Apr 2010 16:56:53 +0000 (12:56 -0400)] 
Simplify qsbr online condition

Alan Stern wrote:

>       return v && (v - rcu_gp_ctr > ULONG_MAX / 2);
>
> Wouldn't it be better to write:
>
>       return v != 0 && v != rcu_gp_ctr;
>
> or something equivalent?  The point is, it's foolish to return 0 when
> rcu_gp_ctr has wrapped around to below v.  This can happen only when
> rcu_thread_online() is delayed (as by preemption), in which case we
> know that there's a good chance the algorithm will fail.  My version of
> the test eliminates the possibility of this failure, although it
> doesn't eliminate the possibility that rcu_gp_ctr has wrapped around so
> far that it is equal to v.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoCleanup: head -> node field name
Mathieu Desnoyers [Wed, 14 Apr 2010 16:37:15 +0000 (12:37 -0400)] 
Cleanup: head -> node field name

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate urcu and urcu-qsbr, make compiler barriers explicit
Mathieu Desnoyers [Wed, 17 Mar 2010 13:31:26 +0000 (09:31 -0400)] 
Update urcu and urcu-qsbr, make compiler barriers explicit

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu: Add extra "engineering safety factor" memory barrier in update_counter_and_wait()
Mathieu Desnoyers [Sun, 14 Mar 2010 19:33:51 +0000 (15:33 -0400)] 
urcu: Add extra "engineering safety factor" memory barrier in update_counter_and_wait()

Even though the memory barriers within update_counter_and_wait() are proven not
to be needed in urcu-mb/signal/qsbr implementations, we leave them in place as
an engineering safety factor. Basically, we've proven they are not required
(formally for urcu-mb and urcu-signal by model checking, less formally for
urcu-qsbr by looking at the execution order of concurrent synchronize_rcu() and
RCU read-sides with out-of-order load/stores). However, given that on the
overall performance impact of synchronize_rcu(), these memory barriers do not
add a significant overhead, let's leave them in place with a comment stating
that they are not required.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu-qsbr: document compiler barrier
Mathieu Desnoyers [Sun, 14 Mar 2010 14:27:23 +0000 (10:27 -0400)] 
urcu-qsbr: document compiler barrier

This compiler barrier is, at the implementation level, already provided by the
volatile accesses for STORE/LOAD_SHARED. However, given that these primitives
does not provide this guarantee at the high-level (and might use lighter gcc
primitives eventually), we need to add an explicit barrier().

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoupdate version to 0.4.3 v0.4.3
Mathieu Desnoyers [Sun, 7 Mar 2010 02:07:18 +0000 (21:07 -0500)] 
update version to 0.4.3

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoFix typo in urcu/uatomic_generic.h
Jon Bernard [Sun, 7 Mar 2010 02:06:36 +0000 (21:06 -0500)] 
Fix typo in urcu/uatomic_generic.h

Signed-off-by: Jon Bernard <jbernard@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate version to 0.4.2 v0.4.2
Mathieu Desnoyers [Thu, 4 Mar 2010 19:57:57 +0000 (14:57 -0500)] 
Update version to 0.4.2

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate README
Mathieu Desnoyers [Thu, 4 Mar 2010 14:54:51 +0000 (09:54 -0500)] 
Update README

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu-bp: reset ctr to 0 upon garbage collection
Mathieu Desnoyers [Wed, 3 Mar 2010 14:08:30 +0000 (09:08 -0500)] 
urcu-bp: reset ctr to 0 upon garbage collection

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agocompiler.h: add () in ACCESS_ONCE()
Mathieu Desnoyers [Tue, 2 Mar 2010 16:41:01 +0000 (11:41 -0500)] 
compiler.h: add () in ACCESS_ONCE()

Protect x in ACCESS_ONCE macro.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agourcu-defer: remove "ratelimit" leftover
Mathieu Desnoyers [Tue, 2 Mar 2010 16:36:49 +0000 (11:36 -0500)] 
urcu-defer: remove "ratelimit" leftover

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoUpdate readme: ia64 and alpha support
Mathieu Desnoyers [Tue, 2 Mar 2010 16:18:30 +0000 (11:18 -0500)] 
Update readme: ia64 and alpha support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
This page took 0.042229 seconds and 4 git commands to generate.