[ARM] fix drivers/mfd/ucb1x00-core.c IRQ probing bug
authorIngo Molnar <mingo@elte.hu>
Mon, 26 Jun 2006 14:26:13 +0000 (15:26 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 26 Jun 2006 14:26:13 +0000 (15:26 +0100)
While reviewing the IRQ autoprobing code i found the attached buglet.
probe_irq_on()/off() calls must always be in pairs, because the generic IRQ
code uses a global semaphore to serialize all autoprobing activites.
(which does make sense) The ARM code's probe_irq_*() implementation does
not do this, but if this driver is ever used on another platform, this bug
might bite.

(It probably does not trigger in practice, because a zero probing mask
returned should be rare - but still.)

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mfd/ucb1x00-core.c

index aff83f966803b2f068719d0cc076092d2a2b5c2c..c8426a9bf27333bb40264f980eea4585278c92e0 100644 (file)
@@ -420,8 +420,10 @@ static int ucb1x00_detect_irq(struct ucb1x00 *ucb)
        unsigned long mask;
 
        mask = probe_irq_on();
-       if (!mask)
+       if (!mask) {
+               probe_irq_off(mask);
                return NO_IRQ;
+       }
 
        /*
         * Enable the ADC interrupt.