]> git.hungrycats.org Git - linux/commitdiff
ia64: Sync with i386 irq.c (deadlock avoidance for certain disable_irq()/
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Mon, 20 Oct 2003 09:07:57 +0000 (02:07 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Mon, 20 Oct 2003 09:07:57 +0000 (02:07 -0700)
enable_irq() sequences).

arch/ia64/kernel/irq.c

index 7e2680cbaadf04d096b5304706bc0677e890d3a6..163544a6b90347a97aa46d75fe906bf99e3730e1 100644 (file)
@@ -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;