On 09/27/2017 05:15 PM, justinpopo6@xxxxxxxxx wrote: > From: Justin Chen <justinpopo6@xxxxxxxxx> > > Commit a3e6c1eff548 ("MIPS: IRQ: Fix disabled_irq on CPU IRQs") fixes > an issue where disable_irq did not actually disable the irq. The > bug caused our IPIs to not be disabled, which actually is the correct > behavior. > > With the addition of Commit a3e6c1eff548 ("MIPS: IRQ: Fix disabled_irq > on CPU IRQs"), the IPIs were getting disabled going into suspend, > thus schedule_ipi() was not being called. This caused deadlocks where > schedulable task were not being scheduled and other cpus were waiting > for them to do something. > > Add the IRQF_NO_SUSPEND flag so an irq_disable will not be called > on the IPIs during suspend. > > Signed-off-by: Justin Chen <justinpopo6@xxxxxxxxx> > Fixes: a3e6c1eff548 ("MIPS: IRQ: Fix disabled_irq on CPU IRQs") This looks good to me, not sure if this is the recommended way to solve this bug, but this definitively works. > --- > arch/mips/kernel/smp-bmips.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c > index 1b070a76fcdd..3b900a04d724 100644 > --- a/arch/mips/kernel/smp-bmips.c > +++ b/arch/mips/kernel/smp-bmips.c > @@ -168,10 +168,10 @@ static void bmips_prepare_cpus(unsigned int max_cpus) > return; > } > > - if (request_irq(IPI0_IRQ, bmips_ipi_interrupt, IRQF_PERCPU, > + if (request_irq(IPI0_IRQ, bmips_ipi_interrupt, IRQF_PERCPU | IRQF_NO_SUSPEND, > "smp_ipi0", NULL)) > panic("Can't request IPI0 interrupt"); > - if (request_irq(IPI1_IRQ, bmips_ipi_interrupt, IRQF_PERCPU, > + if (request_irq(IPI1_IRQ, bmips_ipi_interrupt, IRQF_PERCPU | IRQF_NO_SUSPEND, > "smp_ipi1", NULL)) > panic("Can't request IPI1 interrupt"); > } > -- Florian