* + kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch added to mm-nonmm-unstable branch
@ 2024-12-04 21:59 Andrew Morton
2024-12-05 13:21 ` Thomas Gleixner
0 siblings, 1 reply; 2+ messages in thread
From: Andrew Morton @ 2024-12-04 21:59 UTC (permalink / raw)
To: mm-commits, will, tglx, takakura, sourabhjain, songshuaishuai,
paul.walmsley, palmer, npiggin, naveen, mpe, maddy, linux, jonnyc,
hbathini, christophe.leroy, catalin.marinas, bhe, aou, adityag,
farbere, akpm
The patch titled
Subject: kexec: prevent redundant IRQ masking by checking state before shutdown
has been added to the -mm mm-nonmm-unstable branch. Its filename is
kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch
This patch will shortly appear at
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch
This patch will later appear in the mm-nonmm-unstable branch at
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next via the mm-everything
branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there every 2-3 working days
------------------------------------------------------
From: Eliav Farber <farbere@amazon.com>
Subject: kexec: prevent redundant IRQ masking by checking state before shutdown
Date: Wed, 4 Dec 2024 14:20:03 +0000
During machine kexec, the function machine_kexec_mask_interrupts() is
responsible for disabling or masking all interrupts. While the
irq_disable hook ensures that an already-disabled IRQ is not disabled
again, the current implementation unconditionally invokes the irq_mask()
function for every interrupt descriptor, even when the interrupt is
already masked.
A specific issue was observed in the crash kernel flow after unbinding a
device (prior to kexec) that used a GPIO as an IRQ source. The warning
was triggered by the gpiochip_disable_irq() function, which attempted to
clear the FLAG_IRQ_IS_ENABLED flag when FLAG_USED_AS_IRQ was not set:
```
void gpiochip_disable_irq(struct gpio_chip *gc, unsigned int offset)
{
struct gpio_desc *desc = gpiochip_get_desc(gc, offset);
if (!IS_ERR(desc) &&
!WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags)))
clear_bit(FLAG_IRQ_IS_ENABLED, &desc->flags);
}
```
This issue surfaced after commit a8173820f441 ("gpio: gpiolib: Allow GPIO
IRQs to lazy disable") introduced lazy disablement for GPIO IRQs. It
replaced disable/enable hooks with mask/unmask hooks. Unlike the disable
hook, the mask hook doesn't handle already-masked IRQs.
When a GPIO-IRQ driver is unbound, the IRQ is released, triggering
__irq_disable() and irq_state_set_masked(). A subsequent call to
machine_kexec_mask_interrupts() re-invokes chip->irq_mask(). This results
in a call chain, including gpiochip_irq_mask() and gpiochip_disable_irq().
Since FLAG_USED_AS_IRQ was cleared earlier, a warning occurs.
Replace calls to irq_mask() and irq_disable() hooks with a simplified call
to irq_shutdown(), and check if the interrupt is started (irqd_is_started)
before calling the shutdown.
Link: https://lkml.kernel.org/r/20241204142003.32859-3-farbere@amazon.com
Signed-off-by: Eliav Farber <farbere@amazon.com>
Cc: Aditya Gupta <adityag@linux.ibm.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Baoquan He <bhe@redhat.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Jonathan Chocron <jonnyc@amazon.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Naveen N Rao <naveen@kernel.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Ryo Takakura <takakura@valinux.co.jp>
Cc: Song Shuai <songshuaishuai@tinylab.org>
Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
kernel/irq/kexec.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
--- a/kernel/irq/kexec.c~kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown
+++ a/kernel/irq/kexec.c
@@ -17,7 +17,7 @@ void machine_kexec_mask_interrupts(void)
int check_eoi = 1;
chip = irq_desc_get_chip(desc);
- if (!chip)
+ if (!chip || !irqd_is_started(&desc->irq_data))
continue;
if (IS_ENABLED(CONFIG_GENERIC_IRQ_KEXEC_CLEAR_VM_FORWARD)) {
@@ -31,10 +31,6 @@ void machine_kexec_mask_interrupts(void)
if (check_eoi && chip->irq_eoi && irqd_irq_inprogress(&desc->irq_data))
chip->irq_eoi(&desc->irq_data);
- if (chip->irq_mask)
- chip->irq_mask(&desc->irq_data);
-
- if (chip->irq_disable && !irqd_irq_disabled(&desc->irq_data))
- chip->irq_disable(&desc->irq_data);
+ irq_shutdown(desc);
}
}
_
Patches currently in -mm which might be from farbere@amazon.com are
kexec-consolidate-machine_kexec_mask_interrupts-implementation.patch
kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: + kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch added to mm-nonmm-unstable branch
2024-12-04 21:59 + kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch added to mm-nonmm-unstable branch Andrew Morton
@ 2024-12-05 13:21 ` Thomas Gleixner
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Gleixner @ 2024-12-05 13:21 UTC (permalink / raw)
To: Andrew Morton, mm-commits, will, takakura, sourabhjain,
songshuaishuai, paul.walmsley, palmer, npiggin, naveen, mpe,
maddy, linux, jonnyc, hbathini, christophe.leroy, catalin.marinas,
bhe, aou, adityag, farbere, akpm
On Wed, Dec 04 2024 at 13:59, Andrew Morton wrote:
> The patch titled
> Subject: kexec: prevent redundant IRQ masking by checking state before shutdown
> has been added to the -mm mm-nonmm-unstable branch. Its filename is
> kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch
Can you please drop that as there is a fix for this stuff upcoming which
needs generic interrupt core changes. And that fix should be reordered
as it is stable material. I'm going to take care of this set then.
Thanks,
tglx
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-12-05 13:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-04 21:59 + kexec-prevent-redundant-irq-masking-by-checking-state-before-shutdown.patch added to mm-nonmm-unstable branch Andrew Morton
2024-12-05 13:21 ` Thomas Gleixner
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.