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>
Mathieu Desnoyers [Wed, 7 Oct 2009 21:27:37 +0000 (17:27 -0400)]
update readme
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Mathieu Desnoyers [Tue, 29 Sep 2009 03:23:11 +0000 (23:23 -0400)]
Update .gitignore
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Mathieu Desnoyers [Tue, 22 Sep 2009 21:20:56 +0000 (17:20 -0400)]
makefile update
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:59:21 +0000 (08:59 -0400)]
Permit both 32 and 64-bit builds
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:47:55 +0000 (08:47 -0400)]
Default to architecture size, add Makefile32
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:46:24 +0000 (08:46 -0400)]
Update makefile to compiler for 32-bit architectures on x86_64
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:32:23 +0000 (08:32 -0400)]
Rename define
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:30:03 +0000 (08:30 -0400)]
Fix urcu.c comment
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Fri, 18 Sep 2009 12:20:22 +0000 (08:20 -0400)]
qsbr: use defines to clarify code.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Thu, 17 Sep 2009 15:11:42 +0000 (11:11 -0400)]
qsbr: portability fixes: use unsigned long for the gp counters.
unsigned wraps properly in C (modulo ULONG_MAX + 1), IOW ULONG_MAX + 2
_is_ defined and is 1.
Rewrite rcu_gp_ongoing test to work in the unsigned case:
a - b < 0
becomes
a - b > ULONG_MAX / 2
This test actually means a - b > 0x7f....f which is exactly what we want
to test for in the first place, but in a portable way.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Thu, 17 Sep 2009 12:38:06 +0000 (08:38 -0400)]
qsbr: micro optimization of the gp use.
Follow-up on 1a80f3: since now `0' for a gp counter means "offline", just
be sure that the global GP counter is never zero. To achieve that, let its
first value ever be one, and increment it 2 by 2 like previously done.
Note that it internaly uses the fact that signed integers wraps (which the
previous code already assumed anyways) but this is undefined behaviour in
C. Using unsigned longs would probably be more portable.
This way, setting the cpu online, marking a quiescent state is just a
matter of copying the global gp counter instead of incrementing it by one.
This saves one CPU instruction, and supposedly even register use for
architectures providing memory to memory copy operands.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Pierre Habouzit [Thu, 17 Sep 2009 12:30:19 +0000 (08:30 -0400)]
qsbr: save two full smp_mb() when the writer is also a reader.
Now that you've put the barriers before taking lock, and after releasing
it, one can expand the _rcu_thread_{on,off}line call, and optimize two
barrier calls away. (this is patch 1/2).
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mathieu Desnoyers [Wed, 16 Sep 2009 16:58:58 +0000 (12:58 -0400)]
rename QSBR force_mb_all_threads to smp_mb
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
This page took 0.039065 seconds and 4 git commands to generate.