On 11/12, Boqun Feng wrote: > > On Thu, Nov 12, 2015 at 04:00:58PM +0100, Oleg Nesterov wrote: > > > > No? > > > > do_exit() is surely buggy if spin_lock() could work in this way.
OK, good ;) so we need to fix spin_lock() on PPC ? Or add mb__after_unlock_lock() but this leads to other questions... Or change do_exit() to do lock() + unlock(). > > > And smp_mb__before_spinlock() looks wrong too then. > > > > Maybe not? As smp_mb__before_spinlock() is used before a LOCK operation, > which has both LOAD part and STORE part unlike spin_unlock_wait()? Maybe not. But let me remind that the original purpose of this mb__before_spinlock() was to ensure that "CONDITION = true" before ttwu() can not be reordered with if (!(p->state & state)) goto out; // do not wakeup inside try_to_wake_up(). Otherwise CONDITION = true; try_to_wake_up(p); can race with "p" doing set_current_state(...); // implies mb(); if (CONDITION) return; schedule(); because try_to_wake_up() can read p->state before it sets CONDITION = 1 and then it won't wakeup "p" which has already checked this CONDITION. Now. If try_to_wake_up() can read p->state before it writes to *pi_lock, then how smp_mb__before_spinlock() == wmb() can help to serialize STORE and LOAD? It seems that PPC needs to define smp_mb__before_spinlock() as full mb(), no? 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/