Mathieu Desnoyers [Mon, 3 Jun 2013 04:42:44 +0000 (00:42 -0400)]
rcuja: implement lookup_lower_equal
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Mon, 3 Jun 2013 04:40:07 +0000 (00:40 -0400)]
rcuja tests: fix sanity test printout
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:50:33 +0000 (13:50 -0400)]
rcuja test: add specific free_node()
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:48:04 +0000 (13:48 -0400)]
rcuja test: cleanup
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:26:00 +0000 (13:26 -0400)]
rcuja.sh: add node leak detection
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:23:49 +0000 (13:23 -0400)]
rcuja tests: node leak detection
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:09:46 +0000 (13:09 -0400)]
expand runja.sh
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 17:09:33 +0000 (13:09 -0400)]
ja tests: add printout
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:42:40 +0000 (12:42 -0400)]
rcuja tests: add vs add unique
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:31:49 +0000 (12:31 -0400)]
runja.sh: run sanity tests
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:31:38 +0000 (12:31 -0400)]
rcuja: return errors on destroy
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:31:25 +0000 (12:31 -0400)]
rcuja tests: return errors
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:20:12 +0000 (12:20 -0400)]
rcuja: add runja.sh
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:10:27 +0000 (12:10 -0400)]
rcuja: cleanup destroy print output
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 16:00:43 +0000 (12:00 -0400)]
rcuja: move debugging info into judy array structure
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 31 May 2013 15:45:15 +0000 (11:45 -0400)]
rcuja: use rcu_barrier in destroy
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Mathieu Desnoyers [Sun, 12 Aug 2012 16:51:14 +0000 (12:51 -0400)]
rcuja: cleanup
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
This page took 0.039823 seconds and 4 git commands to generate.