[PATCH] powerpc/64s/interrupt: Fix clear of PACA_IRQS_HARD_DIS when returning to soft-masked context

Sachin Sant sachinp at linux.ibm.com
Sun Oct 23 02:52:00 AEDT 2022



> On 22-Oct-2022, at 10:52 AM, Nicholas Piggin <npiggin at gmail.com> wrote:
> 
> Commit a4cb3651a1743 ("powerpc/64s/interrupt: Fix lost interrupts when
> returning to soft-masked context") fixed the problem of pending irqs
> pending cleared when clearing the HARD_DIS bit, but then it didn't clear
> the bit at all. This change clears HARD_DIS without affecting other bits
> in the mask.
> 
> When an interrupt hits in a soft-masked section that has MSR[EE]=1, it
> can hard disable and set PACA_IRQS_HARD_DIS,which  must be cleared
> when returning to the EE=1 caller (unless it was set due to a
> MUST_HARD_MASK interrupt becoming pending). Failure to clear this leaves
> the returned-to context running with MSR[EE]=1 and PACA_IRQS_HARD_DIS,
> which confuses irq assertions and could be dangerous for code that might
> test the flag.
> 
> This was observed in a hash MMU kernel where a kernel hash fault hits in
> a local_irqs_disabled region that has EE=1. The hash fault also runs
> with EE=1, then as it returns, a decrementer hits in the restart section
> and the irq restart code hard-masks which sets the PACA_IRQ_HARD_DIS
> flag, which is not clear when the original context is returned to.
> 
> Reported-by: Sachin Sant <sachinp at linux.ibm.com>
> Fixes: a4cb3651a1743 ("powerpc/64s/interrupt: Fix lost interrupts when returning to soft-masked context")
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---

Thanks Nick. The patch fixes the reported problem

Tested-by: Sachin Sant <sachinp at linux.ibm.com>


More information about the Linuxppc-dev mailing list