(sorry if you see this email twice) On 12/19, Srivatsa S. Bhat wrote: > > On 12/19/2012 01:13 AM, Oleg Nesterov wrote: > > >> I tried thinking about other ways to avoid that smp_mb() in the reader, > > > > Just in case, I think there is no way to avoid mb() in _get (although > > perhaps it can be "implicit"). > > > > Actually, I was trying to avoid mb() in the _fastpath_, when there is no > active writer. I missed stating that clearly, sorry.
Yes, I meant the fastpath too, > > The writer changes cpu_online_mask and drops the lock. We need to ensure > > that the reader sees the change in cpu_online_mask after _get returns. > > > > The write_unlock() will ensure the completion of the update to > cpu_online_mask, > using the same semi-permeable logic that you pointed above. So readers will > see the update as soon as the writer releases the lock, right? Why? Once again, the writer (say) removes CPU_1 from cpu_online_mask, and sets writer_signal[0] = 0, this "enables" fast path on CPU_0. But, without a barrier, there is no guarantee that CPU_0 will see the change in cpu_online_mask after get_online_cpus_atomic() checks writer_signal[0] and returns. Hmm. And this means that the last version lacks the additional rmb() (at least) if writer_active() == F. 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/