On Wed, Jun 02, 2021 at 03:12:26PM +0200, Peter Zijlstra wrote:
> Remove broken task->state references and let wake_up_process() DTRT.
> 
> The anti-pattern in these patches breaks the ordering of ->state vs
> COND as described in the comment near set_current_state() and can lead
> to missed wakeups:
> 
>       (OoO load, observes RUNNING)<-.
>       for (;;) {                    |
>         t->state = UNINTERRUPTIBLE; |
>         smp_mb();          ,-----> ,' (OoO load, observed !COND)
>                              |       |
>                            |       |  COND = 1;
>                            |       `- if (t->state != RUNNING)
>                              |                  wake_up_process(t); // not 
> done
>         if (COND) ---------'
>           break;
>         schedule(); // forever waiting
>       }
>       t->state = TASK_RUNNING;
> 
> Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
> ---
>  drivers/net/ethernet/qualcomm/qca_spi.c |    6 ++----
>  drivers/usb/gadget/udc/max3420_udc.c    |   15 +++++----------
>  drivers/usb/host/max3421-hcd.c          |    3 +--
>  kernel/softirq.c                        |    2 +-
>  4 files changed, 9 insertions(+), 17 deletions(-)

For USB stuff:

Acked-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>


_______________________________________________
Kgdb-bugreport mailing list
Kgdb-bugreport@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport

Reply via email to