urcu.git
11 years agoRevert "spinlock model: Simplify state-space" formal-model
Mathieu Desnoyers [Tue, 9 Oct 2012 04:12:47 +0000 (00:12 -0400)] 
Revert "spinlock model: Simplify state-space"

This reverts commit a9227ee907160443d0e4b1639b274ab9278d92fa.

Need to study impact on progress.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoRevert "Style Cleanup"
Mathieu Desnoyers [Tue, 9 Oct 2012 04:12:32 +0000 (00:12 -0400)] 
Revert "Style Cleanup"

This reverts commit 03126291913d3c2df1d92137cf82767d9b490ade.

Need to study impact on progress.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoRevert "ticketlock model: state-space simplication"
Mathieu Desnoyers [Tue, 9 Oct 2012 04:12:03 +0000 (00:12 -0400)] 
Revert "ticketlock model: state-space simplication"

This reverts commit d149fa02aaafa08c2d02712afd3cbbbc5f8d5f67.

Need to study impact on progress.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoticketlock model: state-space simplication
Mathieu Desnoyers [Mon, 8 Oct 2012 21:48:58 +0000 (17:48 -0400)] 
ticketlock model: state-space simplication

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoStyle Cleanup
Mathieu Desnoyers [Mon, 8 Oct 2012 21:36:00 +0000 (17:36 -0400)] 
Style Cleanup

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agospinlock model: Simplify state-space
Mathieu Desnoyers [Mon, 8 Oct 2012 21:30:57 +0000 (17:30 -0400)] 
spinlock model: Simplify state-space

Remove useless busy-looping, useless in Promela. Same semantic as the
new code:

Quoting Michel Dagenais <michel.dagenais@polymtl.ca>:

> http://spinroot.com/spin/Man/condition.html
> In Promela , a standalone expression is a valid statement. Execution
> of a condition statement is blocked until the expression evaluates to
> a non-zero value (or, equivalently, to the boolean value true ).
>
> http://spinroot.com/spin/Man/separators.html
> The semicolon and the arrow are equivalent statement separators in
> Promela. The convention is to reserve the use of the arrow separator
> to follow condition statements. The arrow symbol can thus be used to
> visually identify those points in the code where execution could
> block.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoAdd back urcu QSBR selective wakeup model
Mathieu Desnoyers [Mon, 29 Aug 2011 14:28:03 +0000 (10:28 -0400)] 
Add back urcu QSBR selective wakeup model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoAdd 1ton readonly waiter model
Mathieu Desnoyers [Sat, 27 Aug 2011 17:53:02 +0000 (13:53 -0400)] 
Add 1ton readonly waiter model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years ago1to1 selective wakeup: add misorder injection test
Mathieu Desnoyers [Sat, 27 Aug 2011 16:32:36 +0000 (12:32 -0400)] 
1to1 selective wakeup: add misorder injection test

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoUpdate nto1 selective model
Mathieu Desnoyers [Sat, 27 Aug 2011 15:59:42 +0000 (11:59 -0400)] 
Update nto1 selective model

The nto1 selective wakeup model introduced by Paolo was:

a) too complex (tried to model the full-blown RCU rather than a simple
   queue system)
b) did not model progress with wakers running for a limited amount of
   iterations, only with wakers running infinitely often (which
   therefore does not prove anything).

What we really want to model here is what happens if we have wakers
running a few times, and then not running for a very long time: can we
end up with a missed wakeup, and therefore end up with an enqueued entry
but with the waiter waiting forever ?

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoupdate comment
Mathieu Desnoyers [Sat, 27 Aug 2011 15:18:15 +0000 (11:18 -0400)] 
update comment

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoUpdate nto1-selective model comments
Mathieu Desnoyers [Sat, 27 Aug 2011 15:09:19 +0000 (11:09 -0400)] 
Update nto1-selective model comments

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoAdd nto1 futex wakeup scheme model
Mathieu Desnoyers [Sat, 27 Aug 2011 15:08:39 +0000 (11:08 -0400)] 
Add nto1 futex wakeup scheme model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoMove futex wakeup model to nto1-selective
Mathieu Desnoyers [Sat, 27 Aug 2011 14:16:52 +0000 (10:16 -0400)] 
Move futex wakeup model to nto1-selective

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agofutex model: Add futex_progress_inverted_waiting_vs_gp_futex error injection
Mathieu Desnoyers [Wed, 17 Aug 2011 10:05:42 +0000 (06:05 -0400)] 
futex model: Add futex_progress_inverted_waiting_vs_gp_futex error injection

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agomodel optimization of the waker (selective wake)
Paolo Bonzini [Wed, 17 Aug 2011 09:49:40 +0000 (05:49 -0400)] 
model optimization of the waker (selective wake)

This patch adds to the model an optimization, whereby threads are
told whether they are still being waited on, and skip the futex wakeup
if not.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agonew futex model
Paolo Bonzini [Wed, 17 Aug 2011 09:49:08 +0000 (05:49 -0400)] 
new futex model

Rewrite the model to include the futex primitives and the list
move algorithm used by urcu.  The model implements a full-blown
parity-flipping RCU where grace period waits are driven exclusively
by futexes.  It runs the waker and waiter infinitely, asserting
that progress states (parity flips) are reached infinite times.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
14 years agoupdate
Mathieu Desnoyers [Wed, 14 Oct 2009 22:20:49 +0000 (18:20 -0400)] 
update

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agobetter lock-free test
Mathieu Desnoyers [Wed, 14 Oct 2009 15:59:38 +0000 (11:59 -0400)] 
better lock-free test

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agocheck wait free
Mathieu Desnoyers [Wed, 14 Oct 2009 15:07:18 +0000 (11:07 -0400)] 
check wait free

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoupdate
Mathieu Desnoyers [Wed, 14 Oct 2009 13:19:37 +0000 (09:19 -0400)] 
update

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoupdate
Mathieu Desnoyers [Wed, 14 Oct 2009 07:27:34 +0000 (03:27 -0400)] 
update

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoadd ticketlock test for wait-free (failed, as expected)
Mathieu Desnoyers [Wed, 14 Oct 2009 07:18:32 +0000 (03:18 -0400)] 
add ticketlock test for wait-free (failed, as expected)

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoupdate gitignore
Mathieu Desnoyers [Tue, 29 Sep 2009 20:45:16 +0000 (16:45 -0400)] 
update gitignore

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoMove formal-model to root
Mathieu Desnoyers [Tue, 29 Sep 2009 20:44:10 +0000 (16:44 -0400)] 
Move formal-model to root

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoRemove headers from formal model
Mathieu Desnoyers [Tue, 29 Sep 2009 20:43:08 +0000 (16:43 -0400)] 
Remove headers from formal model

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
14 years agoonly keep formal model
Mathieu Desnoyers [Tue, 29 Sep 2009 20:41:35 +0000 (16:41 -0400)] 
only keep formal model

14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 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>
14 years agoPermit both 32 and 64-bit builds
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>
14 years agoDefault to architecture size, add Makefile32
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>
This page took 0.040353 seconds and 4 git commands to generate.