From 8c809d95f12ca590b960defdb9ab004fe3e2a743 Mon Sep 17 00:00:00 2001 From: David Mosberger Date: Mon, 20 Oct 2003 02:07:57 -0700 Subject: [PATCH] ia64: Sync with i386 irq.c (deadlock avoidance for certain disable_irq()/ enable_irq() sequences). --- arch/ia64/kernel/irq.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index 7e2680cbaadf0..163544a6b9034 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c @@ -379,8 +379,11 @@ inline void disable_irq_nosync(unsigned int irq) void disable_irq(unsigned int irq) { + irq_desc_t *desc = irq_descp(irq); + disable_irq_nosync(irq); - synchronize_irq(irq); + if (desc->action) + synchronize_irq(irq); } /** @@ -402,7 +405,7 @@ void enable_irq(unsigned int irq) spin_lock_irqsave(&desc->lock, flags); switch (desc->depth) { case 1: { - unsigned int status = desc->status & ~IRQ_DISABLED; + unsigned int status = desc->status & ~(IRQ_DISABLED | IRQ_INPROGRESS); desc->status = status; if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { desc->status = status | IRQ_REPLAY; -- 2.53.0