Messages in this thread | | | Date | Mon, 8 Dec 2014 12:47:17 -0800 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH v1] CPU hotplug: active_reader not woken up in some cases - deadlock |
| |
On Mon, Dec 08, 2014 at 08:30:18PM +0100, David Hildenbrand wrote: > > > active_writer is cleared while holding cpuhp_lock, so this should be safe, > > > right? > > > > You lost me on that one. Don't we get to that piece of code precisely > > because we don't hold any of the CPU-hotplug locks? If so, the > > writer might well hold all the locks it needs, and might well change > > cpu_hotplug.active_writer out from under us. > > > > What am I missing here? > > > > Thanx, Paul > > I was missing that cpuhp_lock_* are simply lockdep anotations ... it's > getting late :) > > So you're right, we need to verify that we don't get a 0 on the second access.
All you should need to do is to do something like this:
awp = ACCESS_ONCE(cpu_hotplug.active_writer); if (awp) wake_up_process(cpu_hotplug.active_writer);
That way you only have one access, and the check and wake_up_process() are guaranteed to be consistent.
> Will send an updated version soon.
Sounds good!
Thanx, Paul
| |