Messages in this thread | | | Date | Wed, 3 Sep 2014 16:44:50 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH 1/1] do_exit(): Solve possibility of BUG() due to race with try_to_wake_up() |
| |
On Wed, Sep 03, 2014 at 03:36:40PM +0200, Oleg Nesterov wrote: > Peter, sorry for slow responses.
No worries, I'm not entirely fast myself. Slept most of the day :-)
> Ah, I simply do not know what is cheaper, even on x86. Well, we need > to enable/disable irqs, but again I do not really know how much does > this cost.
Ah good point about that IRQ thing, yes that's horribly expensive.
> I can even say what (imo) looks better, lock/unlock above or > > // Ensure that the previous __set_current_state(RUNNING) can't > // leak after spin_unlock_wait() > smp_mb(); > spin_unlock_wait(); > // Another mb to ensure this too can't be reordered with unlock_wait > set_current_state(TASK_DEAD); > > What do you think looks better?
spin_unlock_wait() would be a control dependency right? Therefore that store could not creep up anyhow.
| |