Re: [RFC PATCH v4 1/9] CPU hotplug: Provide APIs to prevent CPU offline from atomic context
From: Oleg Nesterov <oleg@redhat.com>
Date: 2012-12-19 16:39:38
Also in:
lkml
From: Oleg Nesterov <oleg@redhat.com>
Date: 2012-12-19 16:39:38
Also in:
lkml
(sorry if you see this email twice) On 12/19, Srivatsa S. Bhat wrote:
On 12/19/2012 01:13 AM, Oleg Nesterov wrote:quoted
quoted
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,
quoted
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.