Messages in this thread | | | Subject | Re: [PATCH v2] CPU hotplug, freezer: Fix bugs in CPU hotplug call path | From | Peter Zijlstra <> | Date | Tue, 04 Oct 2011 15:37:20 +0200 |
| |
On Tue, 2011-10-04 at 18:58 +0530, Srivatsa S. Bhat wrote: > +static int tasks_frozen; > + > +void set_tasks_frozen_flag(void) > +{ > + tasks_frozen = 1; > + smp_mb(); > +} > + > +void clear_tasks_frozen_flag(void) > +{ > + tasks_frozen = 0; > + smp_mb(); > +} > + > +int tasks_are_frozen(void) > +{ > + return tasks_frozen; > +}
See Documentation/memory-barriers.txt, memory barriers always come in pairs, furthermore memory barriers always should have a comment explaining the ordering and referring to the pair match.
I think you want at least an smp_rmb() before reading tasks_frozen, possible you also want to use ACCESS_ONCE() to force the compiler to emit the read.
Furthermore, do you really need this? isn't it both set and read from the same task context, all under pm_mutex?
| |