On 10/06, Peter Zijlstra wrote: > > On Mon, Oct 06, 2014 at 02:25:09AM +0200, Oleg Nesterov wrote: > > > > Hmm. I specially checked Documentation/memory-barriers.txt, > > > > (*) smp_mb__before_atomic(); > > (*) smp_mb__after_atomic(); > > > > These are for use with atomic (such as add, subtract, increment and > > decrement) functions that don't return a value, especially when used > > for > > reference counting. These functions do not imply memory barriers. > > > > These are also used for atomic bitop functions that do not return a > > value (such as set_bit and clear_bit). > > ^^^^^^^^^^^^^^^^^^^^^ > > > > Either you or memory-barriers.txt should be fixed ;)
Heh. > Its in there, just not explicitly. All those functions listed are > read-modify-write ops, test_bit() is not, its just a read. OOPS! I was hypnotized by "_bit" suffix, I guess. Of course, of course, test_bit() must be a plain LOAD in any case, can't understand what I was thinking about. So in this particular case kthread_kill() needs smp_mb__AFTER_atomic(), and "after" applies to set_bit(KTHREAD_SHOULD_STOP). > --- a/Documentation/memory-barriers.txt > +++ b/Documentation/memory-barriers.txt > @@ -1594,12 +1594,9 @@ CPU from reordering them. > (*) smp_mb__before_atomic(); > (*) smp_mb__after_atomic(); > > - These are for use with atomic (such as add, subtract, increment and > - decrement) functions that don't return a value, especially when used for > - reference counting. These functions do not imply memory barriers. > - > - These are also used for atomic bitop functions that do not return a > - value (such as set_bit and clear_bit). > + These are for use with atomic/bitop (r-m-w) functions that don't return > + a value (eg. atomic_{add,sub,inc,dec}(), {set,clear}_bit()). These > + functions do not imply memory barriers. Thanks! Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/