|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.21] xen/irq: handle IRQ being disabled while executing its handler
commit 6fbfc4845e836b12b9ae31cfe57bfce4c2d26236
Author: Roger Pau Monné <roger.pau@xxxxxxxxxx>
AuthorDate: Tue Jun 30 14:57:14 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Jun 30 14:57:14 2026 +0200
xen/irq: handle IRQ being disabled while executing its handler
It's possible for IRQ_DISABLED to be set while running the handler
execution loop in do_IRQ(). Such disabling can be done by the handler
itself, or from a remote CPU.
Check for IRQ_DISABLED not being set in the loop condition, as to not
execute the handler if the IRQ has been disabled.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
master commit: b5edd9c58e0c77c9e8de26f1e29bc903152f85f1
master date: 2026-06-29 17:14:47 +0200
---
xen/arch/x86/irq.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index ba2f02eb0c..38e43e9fc9 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -2074,7 +2074,9 @@ void do_IRQ(struct cpu_user_regs *regs)
desc->status |= IRQ_INPROGRESS;
action = desc->action;
- while ( desc->status & IRQ_PENDING )
+
+ /* Deal with IRQ_DISABLED being set while inside the loop body. */
+ while ( (desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING )
{
desc->status &= ~IRQ_PENDING;
spin_unlock_irq(&desc->lock);
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.21
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |