From: Ingo Molnar 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 Signed-off-by: Andrew Morton --- drivers/mfd/ucb1x00-core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff -puN drivers/mfd/ucb1x00-core.c~fix-drivers-mfd-ucb1x00-corec-irq-probing-bug drivers/mfd/ucb1x00-core.c --- devel/drivers/mfd/ucb1x00-core.c~fix-drivers-mfd-ucb1x00-corec-irq-probing-bug 2006-06-01 20:19:41.000000000 -0700 +++ devel-akpm/drivers/mfd/ucb1x00-core.c 2006-06-01 20:19:41.000000000 -0700 @@ -420,8 +420,10 @@ static int ucb1x00_detect_irq(struct ucb unsigned long mask; mask = probe_irq_on(); - if (!mask) + if (!mask) { + probe_irq_off(mask); return NO_IRQ; + } /* * Enable the ADC interrupt. _