From: Paul E. McKenney Date: Fri, 21 Apr 2017 13:00:13 +0000 (-0700) Subject: Merge branches 'doc.2017.04.12a', 'fixes.2017.04.19a' and 'srcu.2017.04.21a' into... X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=f2094107ac82bf867184efd77cee30b6a98e2e20;p=openwrt%2Fstaging%2Fblogic.git Merge branches 'doc.2017.04.12a', 'fixes.2017.04.19a' and 'srcu.2017.04.21a' into HEAD doc.2017.04.12a: Documentation updates fixes.2017.04.19a: Miscellaneous fixes srcu.2017.04.21a: Parallelize SRCU callback handling --- f2094107ac82bf867184efd77cee30b6a98e2e20 diff --cc Documentation/RCU/whatisRCU.txt index 8c131a1c62ea,91c912e86915,5cbd8b2395b8..8ed6c9f6133c --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt @@@@ -589,21 -587,20 -587,20 +589,21 @@@@ It is extremely simple write_unlock(&rcu_gp_mutex); } --[You can ignore rcu_assign_pointer() and rcu_dereference() without --missing much. But here they are anyway. And whatever you do, don't --forget about them when submitting patches making use of RCU!] - - #define rcu_assign_pointer(p, v) ({ \ - smp_wmb(); \ - (p) = (v); \ - }) - - #define rcu_dereference(p) ({ \ - typeof(p) _________p1 = p; \ - smp_read_barrier_depends(); \ - (_________p1); \ - }) ++[You can ignore rcu_assign_pointer() and rcu_dereference() without missing ++much. But here are simplified versions anyway. And whatever you do, ++don't forget about them when submitting patches making use of RCU!] + - #define rcu_assign_pointer(p, v) ({ \ - smp_wmb(); \ - (p) = (v); \ - }) ++ #define rcu_assign_pointer(p, v) \ ++ ({ \ ++ smp_store_release(&(p), (v)); \ ++ }) + - #define rcu_dereference(p) ({ \ - typeof(p) _________p1 = p; \ - smp_read_barrier_depends(); \ - (_________p1); \ - }) ++ #define rcu_dereference(p) \ ++ ({ \ ++ typeof(p) _________p1 = p; \ ++ smp_read_barrier_depends(); \ ++ (_________p1); \ ++ }) The rcu_read_lock() and rcu_read_unlock() primitive read-acquire