userspace-rcu.git
10 years agoImplement rcu_barrier()
Mathieu Desnoyers [Fri, 31 May 2013 15:32:16 +0000 (11:32 -0400)] 
Implement rcu_barrier()

Awaits for all in-flight call_rcu handlers to complete execution before
returning.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: tweak pigeon min child for 32-bit
Mathieu Desnoyers [Fri, 31 May 2013 02:51:22 +0000 (22:51 -0400)] 
rcuja: tweak pigeon min child for 32-bit

value 89 was causing 2% fallback node with random population. value 83
triggers only 0.01% fallback nodes.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: tweak pigeon min child for 64-bit
Mathieu Desnoyers [Fri, 31 May 2013 02:27:13 +0000 (22:27 -0400)] 
rcuja: tweak pigeon min child for 64-bit

value 101 was causing 2% fallback node with random population. value 95
triggers only 0.01% fallback nodes.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja testing: add arbitrary wait
Mathieu Desnoyers [Fri, 31 May 2013 02:14:51 +0000 (22:14 -0400)] 
rcuja testing: add arbitrary wait

For testing purposes, wait for free to be performed.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: perform lookup in attach node
Mathieu Desnoyers [Fri, 31 May 2013 02:10:38 +0000 (22:10 -0400)] 
rcuja fix: perform lookup in attach node

Handles case where the existing location is not yet reserved. Therefore,
a pointer check cannot be used to check if it has been concurrently
populated. A full-blown lookup is therefore required.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: implement add unique
Mathieu Desnoyers [Thu, 30 May 2013 20:34:59 +0000 (16:34 -0400)] 
rcuja: implement add unique

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: fixes and add redesign of "add"
Mathieu Desnoyers [Thu, 30 May 2013 20:06:23 +0000 (16:06 -0400)] 
rcuja: fixes and add redesign of "add"

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: destroy should be done online
Mathieu Desnoyers [Thu, 30 May 2013 20:05:51 +0000 (16:05 -0400)] 
rcuja test: destroy should be done online

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: print info about allocated/freed/fallback nodes
Mathieu Desnoyers [Thu, 30 May 2013 11:08:35 +0000 (07:08 -0400)] 
rcuja: print info about allocated/freed/fallback nodes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: fix 2d distance calculation
Mathieu Desnoyers [Thu, 30 May 2013 10:57:43 +0000 (06:57 -0400)] 
rcuja fix: fix 2d distance calculation

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: update 2d distance calculation
Mathieu Desnoyers [Thu, 30 May 2013 02:41:26 +0000 (22:41 -0400)] 
rcuja fix: update 2d distance calculation

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: add same can use same fallback as add next
Mathieu Desnoyers [Thu, 30 May 2013 02:06:45 +0000 (22:06 -0400)] 
rcuja: add same can use same fallback as add next

Still need to figure out why this fallback is reached in add same.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: implement 2d distribution
Mathieu Desnoyers [Thu, 30 May 2013 01:54:09 +0000 (21:54 -0400)] 
rcuja: implement 2d distribution

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja 1d distribution: cleanup
Mathieu Desnoyers [Wed, 29 May 2013 19:48:16 +0000 (15:48 -0400)] 
rcuja 1d distribution: cleanup

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: implement 1 dimension pool distribution
Mathieu Desnoyers [Tue, 28 May 2013 13:29:00 +0000 (09:29 -0400)] 
rcuja: implement 1 dimension pool distribution

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix rcuja: fallback when adding element to full pool
Mathieu Desnoyers [Tue, 28 May 2013 03:58:39 +0000 (23:58 -0400)] 
Fix rcuja: fallback when adding element to full pool

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: fix -k option
Mathieu Desnoyers [Tue, 28 May 2013 03:49:11 +0000 (23:49 -0400)] 
rcuja test: fix -k option

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: Add missing header
Mathieu Desnoyers [Mon, 27 May 2013 18:59:01 +0000 (14:59 -0400)] 
rcuja: Add missing header

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: print mul fact
Mathieu Desnoyers [Mon, 27 May 2013 18:53:00 +0000 (14:53 -0400)] 
rcuja test: print mul fact

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: add key multiplication factor
Mathieu Desnoyers [Mon, 27 May 2013 18:48:23 +0000 (14:48 -0400)] 
rcuja test: add key multiplication factor

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agotest rcuja: add ratio parameter
Mathieu Desnoyers [Mon, 27 May 2013 17:39:25 +0000 (13:39 -0400)] 
test rcuja: add ratio parameter

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: list prev pointer vs recompaction
Mathieu Desnoyers [Mon, 27 May 2013 17:13:55 +0000 (13:13 -0400)] 
rcuja fix: list prev pointer vs recompaction

We should update the list prev pointer (for the first node) when a
recompaction changes the address of the list head. Currently a
work-around.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix rcuja: concurrency checks
Mathieu Desnoyers [Mon, 27 May 2013 17:12:44 +0000 (13:12 -0400)] 
Fix rcuja: concurrency checks

add/delete need to re-check that RCU lookups are still valid after
taking node locks.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: use poison_free
Mathieu Desnoyers [Mon, 27 May 2013 17:10:08 +0000 (13:10 -0400)] 
rcuja test: use poison_free

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja test: add missing rcu read unlock
Mathieu Desnoyers [Mon, 27 May 2013 17:09:38 +0000 (13:09 -0400)] 
rcuja test: add missing rcu read unlock

No impact for now, since we use QSBR.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: handle add/removal/add concurrency
Mathieu Desnoyers [Thu, 23 May 2013 21:02:14 +0000 (17:02 -0400)] 
rcuja fix: handle add/removal/add concurrency

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: del wrt concurrency
Mathieu Desnoyers [Thu, 23 May 2013 15:16:13 +0000 (11:16 -0400)] 
rcuja fix: del wrt concurrency

testing with:
test_urcu_ja 0 3 10 -v -M 1 -N 1 -O 1

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix urcu test: incorrect handling of del/free
Mathieu Desnoyers [Thu, 23 May 2013 15:15:49 +0000 (11:15 -0400)] 
Fix urcu test: incorrect handling of del/free

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agohlist: remove needless "member" parameter
Mathieu Desnoyers [Thu, 23 May 2013 14:33:39 +0000 (10:33 -0400)] 
hlist: remove needless "member" parameter

cds_hlist_for_each_rcu and cds_hlist_first_rcu don't need to "member"
parameter at all.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix rcuja: chain/unchain locking vs retry
Mathieu Desnoyers [Thu, 23 May 2013 13:54:24 +0000 (09:54 -0400)] 
Fix rcuja: chain/unchain locking vs retry

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix rcuja: delete last node
Mathieu Desnoyers [Thu, 23 May 2013 00:46:47 +0000 (20:46 -0400)] 
Fix rcuja: delete last node

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja fix: get the right node
Mathieu Desnoyers [Sat, 18 May 2013 17:19:09 +0000 (19:19 +0200)] 
rcuja fix: get the right node

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agoFix rcuja: handle concurrent updates
Mathieu Desnoyers [Sat, 18 May 2013 15:18:52 +0000 (17:18 +0200)] 
Fix rcuja: handle concurrent updates

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 years agorcuja: Add debug output
Mathieu Desnoyers [Sat, 18 May 2013 15:18:31 +0000 (17:18 +0200)] 
rcuja: Add debug output

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja test: add rcu_ prefix to debug_yield_read
Mathieu Desnoyers [Tue, 14 May 2013 15:03:31 +0000 (17:03 +0200)] 
rcuja test: add rcu_ prefix to debug_yield_read

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: allow non-power of 2 keys
Mathieu Desnoyers [Wed, 29 Aug 2012 05:17:15 +0000 (22:17 -0700)] 
rcuja: allow non-power of 2 keys

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add multithread test
Mathieu Desnoyers [Wed, 29 Aug 2012 05:13:24 +0000 (22:13 -0700)] 
rcuja: add multithread test

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoFix: rcuja: typo
Mathieu Desnoyers [Wed, 29 Aug 2012 05:12:56 +0000 (22:12 -0700)] 
Fix: rcuja: typo

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: test duplicate node/key support
Mathieu Desnoyers [Sun, 26 Aug 2012 00:57:59 +0000 (20:57 -0400)] 
rcuja: test duplicate node/key support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: fix duplicate node/key support
Mathieu Desnoyers [Sun, 26 Aug 2012 00:57:43 +0000 (20:57 -0400)] 
rcuja: fix duplicate node/key support

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agohlist: implement non-entry API
Mathieu Desnoyers [Sun, 26 Aug 2012 00:57:24 +0000 (20:57 -0400)] 
hlist: implement non-entry API

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: fix delete
Mathieu Desnoyers [Sun, 26 Aug 2012 00:12:00 +0000 (20:12 -0400)] 
rcuja: fix delete

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: free all leaf nodes at destruction
Mathieu Desnoyers [Fri, 24 Aug 2012 21:30:02 +0000 (17:30 -0400)] 
rcuja: free all leaf nodes at destruction

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agohlist: implement cds_hlist_first_entry_rcu
Mathieu Desnoyers [Fri, 24 Aug 2012 21:29:52 +0000 (17:29 -0400)] 
hlist: implement cds_hlist_first_entry_rcu

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement delete function
Mathieu Desnoyers [Fri, 24 Aug 2012 17:22:13 +0000 (13:22 -0400)] 
rcuja: implement delete function

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agohlist: implement cds_hlist_empty
Mathieu Desnoyers [Fri, 24 Aug 2012 17:21:49 +0000 (13:21 -0400)] 
hlist: implement cds_hlist_empty

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: partial implementation of cds_ja_del
Mathieu Desnoyers [Thu, 23 Aug 2012 19:31:06 +0000 (15:31 -0400)] 
rcuja: partial implementation of cds_ja_del

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement ja_node_clear_nth
Mathieu Desnoyers [Wed, 22 Aug 2012 16:58:17 +0000 (12:58 -0400)] 
rcuja: implement ja_node_clear_nth

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: extend tests, more fixes
Mathieu Desnoyers [Tue, 21 Aug 2012 21:38:27 +0000 (17:38 -0400)] 
rcuja: extend tests, more fixes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: fix max depth test
Mathieu Desnoyers [Tue, 21 Aug 2012 14:42:38 +0000 (10:42 -0400)] 
rcuja: fix max depth test

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: swap key
Mathieu Desnoyers [Tue, 21 Aug 2012 14:40:44 +0000 (10:40 -0400)] 
rcuja: swap key

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add fallback nodes
Mathieu Desnoyers [Tue, 21 Aug 2012 13:08:46 +0000 (09:08 -0400)] 
rcuja: add fallback nodes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: various fixes
Mathieu Desnoyers [Tue, 21 Aug 2012 00:25:37 +0000 (20:25 -0400)] 
rcuja: various fixes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add basic test
Mathieu Desnoyers [Mon, 20 Aug 2012 16:02:54 +0000 (12:02 -0400)] 
rcuja: add basic test

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: create shadow node for root
Mathieu Desnoyers [Sun, 19 Aug 2012 13:28:53 +0000 (09:28 -0400)] 
rcuja: create shadow node for root

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement add
Mathieu Desnoyers [Sun, 19 Aug 2012 01:16:34 +0000 (21:16 -0400)] 
rcuja: implement add

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement lookup
Mathieu Desnoyers [Mon, 13 Aug 2012 13:58:40 +0000 (09:58 -0400)] 
rcuja: implement lookup

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: rename cds_ja_node to cds_ja_inode
Mathieu Desnoyers [Mon, 13 Aug 2012 13:16:13 +0000 (09:16 -0400)] 
rcuja: rename cds_ja_node to cds_ja_inode

inode for internal node.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: new and destroy
Mathieu Desnoyers [Mon, 13 Aug 2012 12:26:55 +0000 (08:26 -0400)] 
rcuja: new and destroy

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: rename to cds_ja
Mathieu Desnoyers [Mon, 13 Aug 2012 12:09:00 +0000 (08:09 -0400)] 
rcuja: rename to cds_ja

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add comment about use of number of nodes
Mathieu Desnoyers [Mon, 13 Aug 2012 00:55:31 +0000 (20:55 -0400)] 
rcuja: add comment about use of number of nodes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: fix iteration on recompact add
Mathieu Desnoyers [Mon, 13 Aug 2012 00:39:33 +0000 (20:39 -0400)] 
rcuja: fix iteration on recompact add

We must iterate on all entries by position, not by value.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: share lock across all nodes with same key
Mathieu Desnoyers [Sun, 12 Aug 2012 23:52:58 +0000 (19:52 -0400)] 
rcuja: share lock across all nodes with same key

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: no need to link with urcu lib anymore
Mathieu Desnoyers [Sun, 12 Aug 2012 20:50:02 +0000 (16:50 -0400)] 
rcuja: no need to link with urcu lib anymore

Now that we use the rcu flavor provided as parameter by the application,
there is no need to link with a urcu lib flavor.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: use rcu ja app flavor for shadow hash table
Mathieu Desnoyers [Sun, 12 Aug 2012 20:26:53 +0000 (16:26 -0400)] 
rcuja: use rcu ja app flavor for shadow hash table

Since we use call_rcu to delay reclaim of the rcu ja node too, we need
to use the same RCU flavor as the application that calls the RCU JA API.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: shadow clear also frees the rcu ja node associated
Mathieu Desnoyers [Sun, 12 Aug 2012 20:13:27 +0000 (16:13 -0400)] 
rcuja: shadow clear also frees the rcu ja node associated

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement shadow node hash table
Mathieu Desnoyers [Sun, 12 Aug 2012 20:06:21 +0000 (16:06 -0400)] 
rcuja: implement shadow node hash table

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add shadow nodes hash table
Mathieu Desnoyers [Sun, 12 Aug 2012 19:08:00 +0000 (15:08 -0400)] 
rcuja: add shadow nodes hash table

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add data structures for rcu_ja and shadow nodes
Mathieu Desnoyers [Sun, 12 Aug 2012 18:38:52 +0000 (14:38 -0400)] 
rcuja: add data structures for rcu_ja and shadow nodes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: add missing assign in recompact
Mathieu Desnoyers [Sun, 12 Aug 2012 18:29:40 +0000 (14:29 -0400)] 
rcuja: add missing assign in recompact

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement node add recompaction
Mathieu Desnoyers [Sun, 12 Aug 2012 18:04:40 +0000 (14:04 -0400)] 
rcuja: implement node add recompaction

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: set node update, rcu-ize get node/set node
Mathieu Desnoyers [Sun, 12 Aug 2012 17:06:53 +0000 (13:06 -0400)] 
rcuja: set node update, rcu-ize get node/set node

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: cleanup
Mathieu Desnoyers [Sun, 12 Aug 2012 16:51:14 +0000 (12:51 -0400)] 
rcuja: cleanup

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: implement node set nth
Mathieu Desnoyers [Fri, 3 Aug 2012 03:07:23 +0000 (23:07 -0400)] 
rcuja: implement node set nth

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: introduce union to represent nodes
Mathieu Desnoyers [Mon, 30 Jul 2012 03:47:36 +0000 (23:47 -0400)] 
rcuja: introduce union to represent nodes

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja testpop: print extra items in subclass instead of confusing "unbalance"
Mathieu Desnoyers [Sat, 16 Jun 2012 19:14:03 +0000 (15:14 -0400)] 
rcuja testpop: print extra items in subclass instead of confusing "unbalance"

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoUse statistical approach to approximate the max number of nodes per population
Mathieu Desnoyers [Sat, 16 Jun 2012 18:12:55 +0000 (14:12 -0400)] 
Use statistical approach to approximate the max number of nodes per population

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: Update design document, discuss pool distributions
Mathieu Desnoyers [Tue, 20 Mar 2012 13:15:47 +0000 (09:15 -0400)] 
rcuja: Update design document, discuss pool distributions

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: use pool of linear array instead of bitmap
Mathieu Desnoyers [Fri, 9 Mar 2012 23:14:21 +0000 (18:14 -0500)] 
rcuja: use pool of linear array instead of bitmap

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoRCU judy array: implement node get functions
Mathieu Desnoyers [Fri, 9 Mar 2012 18:09:18 +0000 (13:09 -0500)] 
RCU judy array: implement node get functions

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorcuja: Increase granularity
Mathieu Desnoyers [Fri, 9 Mar 2012 03:23:33 +0000 (22:23 -0500)] 
rcuja: Increase granularity

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoRCU Judy Array Design and initial files
Mathieu Desnoyers [Fri, 9 Mar 2012 01:16:27 +0000 (20:16 -0500)] 
RCU Judy Array Design and initial files

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoFix: membarrier fallback symbol conflict
Mathieu Desnoyers [Wed, 8 May 2013 13:53:45 +0000 (09:53 -0400)] 
Fix: membarrier fallback symbol conflict

* Lai Jiangshan (laijs@cn.fujitsu.com) wrote:
> Hi, Mathieu,
>
> There is a big compatible problem in URCU which should be fix in next round.
>
> LB: liburcu built on the system which has sys_membarrier().
> LU: liburcu built on the system which does NOT have sys_membarrier().
>
> LBM: liburcu-mb ....
> LUM: liburcu-mb ...
>
> AB: application(-lliburcu) built on the system which has sys_membarrier().
> AU: application(-lliburcu) built on the system which does NOT have
> sys_membarrier().
>
> ABM application(-lliburcu-mb) ...
> AUM application(-lliburcu-mb) ...
>
> AB/AU + LB/LU: 4 combinations
> ABM/AUM + LBM/LUM: 4 combinations
>
> I remember some of the 8 combinations can't works due to symbols are
> miss match.  only LU+AB and LB+AU ?
>
> could you check it?
>
> How to fix it: In LU and AU, keep all the symbol name/ABI as LA and
> AB, but only the behaviors falls back to URCU_MB.

Define membarrier() as -ENOSYS when SYS_membarrier is not found in the
system headers. Check dynamically for membarrier availability to ensure
ABI compatibility between applications and librairies.

Reported-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoFix: Use a filled signal mask to disable all signals
Mathieu Desnoyers [Fri, 10 May 2013 11:30:18 +0000 (07:30 -0400)] 
Fix: Use a filled signal mask to disable all signals

Changelog from David Pelton's original patch:

While using lttng-ust with an application that was calling fork()
with pending signals, I found that all signals were getting unmasked
shortly before the underlying call to fork().  After some
investigation, I found that the rcu_bp_before_fork() function was
unmasking all signals.  Based on the comments for this function, it
should be masking all signals.  Inspection of the rest of the code
in urcu-bp.c revealed the same pattern in two other functions.

This patch changes the code to use a filled signal mask to disable
all signals.  The change to rcu_bp_before_fork() addressed the
problem I was seeing while using lttng-ust.  The changes to the
other two functions appear to fix other instances of the same
problem.

Updates by Mathieu Desnoyers:

- Use SIG_BLOCK instead of SIG_SETMASK when setting a filled mask. This
  has the same behavior in this case (since we're blocking all signals),
  but is semantically neater: if we ever some signals from that mask,
  we'd like to to a union with the signal mask already blocked by the
  application.
- Also fix incorrect signal masking in compat_arch_x86.c.

Reported-by: David Pelton <dpelton@ciena.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agourcu-bp: introduce struct urcu_gp
Mathieu Desnoyers [Mon, 6 May 2013 14:30:57 +0000 (10:30 -0400)] 
urcu-bp: introduce struct urcu_gp

Make urcu-bp similar to urcu-qsbr and other urcu flavors.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoFix: struct urcu_gp broke multiflavor
Mathieu Desnoyers [Mon, 6 May 2013 14:24:14 +0000 (10:24 -0400)] 
Fix: struct urcu_gp broke multiflavor

Add mapping to namespace urcu_gp.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoCleanup test usage printout
Mathieu Desnoyers [Mon, 6 May 2013 14:03:55 +0000 (10:03 -0400)] 
Cleanup test usage printout

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agowfstack tests: use pop "last" state info
Mathieu Desnoyers [Mon, 6 May 2013 13:35:42 +0000 (09:35 -0400)] 
wfstack tests: use pop "last" state info

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agowfstack: return whether pop is popping the last element
Mathieu Desnoyers [Mon, 6 May 2013 13:35:07 +0000 (09:35 -0400)] 
wfstack: return whether pop is popping the last element

Newly introduced "with_state" pop API members return stack state
atomically sampled with the pop operation.

Allow testing behavior of pop with respect to number of push-to-empty
and pop-all-from-non-empty.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agowfcqueue tests: use dequeue empty state
Mathieu Desnoyers [Mon, 6 May 2013 13:34:00 +0000 (09:34 -0400)] 
wfcqueue tests: use dequeue empty state

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agowfcqueue: return whether dequeue is dequeuing last element
Mathieu Desnoyers [Mon, 6 May 2013 13:33:36 +0000 (09:33 -0400)] 
wfcqueue: return whether dequeue is dequeuing last element

Newly introduced "with_state" dequeue API members return queue state
atomically sampled with the dequeue operation.

Allow testing behavior of dequeue with respect to number of
enqueue-to-empty and splice-from-non-empty.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agourcu: avoid false sharing for rcu_gp_ctr
Lai Jiangshan [Mon, 6 May 2013 12:42:27 +0000 (08:42 -0400)] 
urcu: avoid false sharing for rcu_gp_ctr

@rcu_gp_ctr and @registry share the same cache line, it causes
false sharing and slowdown both of the read site and update site.

Fix: Use different cache line for them.

Although rcu_gp_futex is updated less than rcu_gp_ctr, but
they always be accessed at almost the same time, so we also move rcu_gp_futex
to the cacheline of rcu_gp_ctr to reduce the cacheline-usage or cache-missing
of read site.

test: (4X6=24 CPUs)

Before patch:

[root@localhost userspace-rcu]# ./tests/test_urcu_mb 20 1 20
SUMMARY ./tests/test_urcu_mb      testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads   2100285330 nr_writes      3390219 nr_ops   2103675549
[root@localhost userspace-rcu]# ./tests/test_urcu_mb 20 1 20
SUMMARY ./tests/test_urcu_mb      testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads   1619868562 nr_writes      3529478 nr_ops   1623398040
[root@localhost userspace-rcu]# ./tests/test_urcu_mb 20 1 20
SUMMARY ./tests/test_urcu_mb      testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads   1949067038 nr_writes      3469334 nr_ops   1952536372

after patch:

[root@localhost userspace-rcu]# ./tests/test_urcu_mb 20 1 20
SUMMARY ./tests/test_urcu_mb      testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads   3380191848 nr_writes      4903248 nr_ops   3385095096
[root@localhost userspace-rcu]# ./tests/test_urcu_mb 20 1 20
SUMMARY ./tests/test_urcu_mb      testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads   3397637486 nr_writes      4129809 nr_ops   3401767295

Singed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agourcu: make the code of urcu-qsbr as normal urcu
Lai Jiangshan [Mon, 6 May 2013 12:32:02 +0000 (08:32 -0400)] 
urcu: make the code of urcu-qsbr as normal urcu

urcu-qsbr's read site's quiescence is much longer than normal urcu ==>
synchronize_rcu() is much slower ==>
rcu_gp_ctr is updated much less ==>
the whole urcu-qsbr will not be slowed down by false sharing of rcu_gp_ctr.

But this patch makes sense to keep the code of urcu-qsbr like normal urcu,
better readability and maintenance.

Test: (4*6 CPUs)
Before patch:
[root@localhost userspace-rcu]# ./tests/test_urcu_qsbr 20 1 20
SUMMARY ./tests/test_urcu_qsbr    testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads  65498297587 nr_writes      2000665 nr_ops  65500298252
[root@localhost userspace-rcu]# ./tests/test_urcu_qsbr 20 1 20
SUMMARY ./tests/test_urcu_qsbr    testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads  67218079467 nr_writes      1981593 nr_ops  67220061060

After patch
./tests/test_urcu_qsbr 20 1 20
SUMMARY ./tests/test_urcu_qsbr    testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads  67473798999 nr_writes      1999151 nr_ops  67475798150
[root@localhost userspace-rcu]# ./tests/test_urcu_qsbr 20 1 20
SUMMARY ./tests/test_urcu_qsbr    testdur   20 nr_readers  20 rdur      0 wdur      0 nr_writers   1 wdelay      0 nr_reads  67065521397 nr_writes      1993956 nr_ops  67067515353

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agorculfhash: detect if resize/destroy are called within RCU read-side C.S.
Mathieu Desnoyers [Tue, 30 Apr 2013 01:30:17 +0000 (21:30 -0400)] 
rculfhash: detect if resize/destroy are called within RCU read-side C.S.

Report errors.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoDocumentation: rculfhash: cds_lfht_resize not within read-side C.S.
Mathieu Desnoyers [Tue, 30 Apr 2013 00:48:40 +0000 (20:48 -0400)] 
Documentation: rculfhash: cds_lfht_resize not within read-side C.S.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agofix: rculfhash don't change qsbr online state
Mathieu Desnoyers [Tue, 30 Apr 2013 00:28:10 +0000 (20:28 -0400)] 
fix: rculfhash don't change qsbr online state

resize and destroy should not change the QSBR online state. Use the new
rcu_read_ongoing() API for this.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoAdd rcu_read_ongoing() API to each urcu flavor
Mathieu Desnoyers [Tue, 30 Apr 2013 00:17:22 +0000 (20:17 -0400)] 
Add rcu_read_ongoing() API to each urcu flavor

This will allow checking whether:

- thread is online (QSBR),
- thread is nested within read-side critical section (other flavors),

This is useful for libraries that need to know if QSBR is online in
order to save the original state temporarily so it can be restored
before returning to the caller.

Eventually, this API can be called by a "debugging" implementation of
rcu_dereference() and other urcu-pointer.h API members to check that no
RCU pointer is read outside of RCU read-side critical sections.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoAdd "sparc" host cpu to configure.ac
Mathieu Desnoyers [Wed, 17 Apr 2013 21:26:05 +0000 (17:26 -0400)] 
Add "sparc" host cpu to configure.ac

Some sparc Debian setups advertise a "sparc" host cpu (rather than
sparc64).

In all cases, I think it should be safe to add a "sparc" entry to
userspace RCU configure.ac upstream, e.g.

        [sparc], [ARCHTYPE="sparc64"],

in the event someone would launch the build on an environment not
supporting sparc v9, the build would fail because the 32-bit compiler
would not be able to generate sparc v9 instructions (unless
explicitely instructed to do so by the -m32 -Wa,-Av9a flags).

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agofutex: include syscall.h instead of sys/syscall.h
Mathieu Desnoyers [Tue, 16 Apr 2013 17:09:02 +0000 (13:09 -0400)] 
futex: include syscall.h instead of sys/syscall.h

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 years agoAdd tab to output in order to allow easy nesting of tables.
Paul E. McKenney [Thu, 14 Mar 2013 15:22:23 +0000 (11:22 -0400)] 
Add tab to output in order to allow easy nesting of tables.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
This page took 0.04152 seconds and 4 git commands to generate.