Re: [PATCH] stop_machine: Disable preemption after queueing stopper threads

From: Thomas Gleixner
Date: Mon Jul 30 2018 - 08:41:10 EST


On Mon, 30 Jul 2018, Peter Zijlstra wrote:

> On Mon, Jul 30, 2018 at 12:20:57PM +0200, Thomas Gleixner wrote:
> > On Tue, 24 Jul 2018, Sebastian Andrzej Siewior wrote:
> > > On 2018-07-23 18:13:48 [-0700], isaacm@xxxxxxxxxxxxxx wrote:
> > > > Hi all,
> > > Hi,
> > >
> > > > Are there any comments about this patch?
> > >
> > > I haven't look in detail at this but your new preempt_disable() makes
> > > things unbalanced for the err != 0 case.
> >
> > It doesn't but that code is really an unreadable pile of ...
>
> ---
> Subject: stop_machine: Reflow cpu_stop_queue_two_works()
>
> The code flow in cpu_stop_queue_two_works() is a little arcane; fix
> this by lifting the preempt_disable() to the top to create more natural
> nesting wrt the spinlocks and make the wake_up_q() and preempt_enable()
> unconditional at the end.
>
> Furthermore, enable preemption in the -EDEADLK case, such that we
> spin-wait with preemption enabled.
>
> Suggested-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>

Thanks for cleaning that up!

Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>