rcu: Make rcu_assign_pointer() unconditionally insert a memory barrier
Recent changes to gcc give warning messages on rcu_assign_pointers()'s checks that allow it to determine when it is OK to omit the memory barrier. Stephen Hemminger tried a number of gcc tricks to silence this warning, but #pragmas and CPP macros do not work together in the way that would be required to make this work. However, we now have RCU_INIT_POINTER(), which already omits this memory barrier, and which therefore may be used when assigning NULL to an RCU-protected pointer that is accessible to readers. This commit therefore makes rcu_assign_pointer() unconditionally emit the memory barrier. Reported-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
Родитель
7eb4f4553c
Коммит
d322f45cee
|
@ -443,9 +443,7 @@ extern int rcu_my_thread_group_empty(void);
|
||||||
})
|
})
|
||||||
#define __rcu_assign_pointer(p, v, space) \
|
#define __rcu_assign_pointer(p, v, space) \
|
||||||
({ \
|
({ \
|
||||||
if (!__builtin_constant_p(v) || \
|
smp_wmb(); \
|
||||||
((v) != NULL)) \
|
|
||||||
smp_wmb(); \
|
|
||||||
(p) = (typeof(*v) __force space *)(v); \
|
(p) = (typeof(*v) __force space *)(v); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче