lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 397/633] powerpc/64: fix irq replay missing preempt
    Date
    From: Nicholas Piggin <npiggin@gmail.com>

    [ Upstream commit 903fd31d3212ab72d564c68f6cfb5d04db68773e ]

    Prior to commit 3282a3da25bd ("powerpc/64: Implement soft interrupt
    replay in C"), replayed interrupts returned by the regular interrupt
    exit code, which performs preemption in case an interrupt had set
    need_resched.

    This logic was missed by the conversion. Adding preempt_disable/enable
    around the interrupt replay and final irq enable will reschedule if
    needed.

    Fixes: 3282a3da25bd ("powerpc/64: Implement soft interrupt replay in C")
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200915114650.3980244-1-npiggin@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/kernel/irq.c | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
    index 05b1cc0e009e4..297ee79febc6c 100644
    --- a/arch/powerpc/kernel/irq.c
    +++ b/arch/powerpc/kernel/irq.c
    @@ -368,6 +368,12 @@ notrace void arch_local_irq_restore(unsigned long mask)
    }
    }

    + /*
    + * Disable preempt here, so that the below preempt_enable will
    + * perform resched if required (a replayed interrupt may set
    + * need_resched).
    + */
    + preempt_disable();
    irq_soft_mask_set(IRQS_ALL_DISABLED);
    trace_hardirqs_off();

    @@ -377,6 +383,7 @@ notrace void arch_local_irq_restore(unsigned long mask)
    trace_hardirqs_on();
    irq_soft_mask_set(IRQS_ENABLED);
    __hard_irq_enable();
    + preempt_enable();
    }
    EXPORT_SYMBOL(arch_local_irq_restore);

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 16:14    [W:4.018 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site