rendered paste bodydiff -Naur a/drivers/soc/asic3_base.c b/drivers/soc/asic3_base.c
--- a/drivers/soc/asic3_base.c 2007-02-16 09:07:09.000000000 +0100
+++ b/drivers/soc/asic3_base.c 2007-02-16 17:58:21.000000000 +0100
@@ -432,7 +432,8 @@
static void
asic3_irq_demux (unsigned int irq, struct irq_desc *desc)
{
- int i;
+ int i, loop;
+ u32 status;
struct asic3_data *asic;
/* Acknowledge the parrent (i.e. CPU's) IRQ */
@@ -440,9 +441,8 @@
asic = desc->handler_data;
- // printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq );
- for (i = 0 ; i < MAX_ASIC_ISR_LOOPS; i++) {
- u32 status;
+// printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq );
+ for (loop = 0 ; loop < MAX_ASIC_ISR_LOOPS; loop++) {
int bank;
status = __asic3_read_register (asic, _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_PIntStat);
@@ -452,7 +452,7 @@
for (bank = 0; bank < 4; bank++) {
if (status & (1 << bank)) {
- unsigned long base, i, istat;
+ unsigned long base, istat;
base = _IPAQ_ASIC3_GPIO_A_Base + (bank * (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base));
istat = __asic3_read_register (asic, base + _IPAQ_ASIC3_GPIO_IntStatus);
@@ -480,22 +480,18 @@
}
/* Handle remaining IRQs in the status register */
- {
- int i;
-
- for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) {
- /* They start at bit 4 and go up */
- if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) {
- desc = irq_desc + asic->irq_base + i;
- desc->handle_irq (asic->irq_base + i, desc);
- }
+ for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) {
+ /* They start at bit 4 and go up */
+ if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) {
+ desc = irq_desc + asic->irq_base + i;
+ desc->handle_irq (asic->irq_base + i, desc);
}
}
}
- if (i >= MAX_ASIC_ISR_LOOPS)
- printk("%s: interrupt processing overrun\n", __FUNCTION__);
+ if (loop >= MAX_ASIC_ISR_LOOPS && status)
+ printk("%s: interrupt processing overrun, pending=0x%x\n", __FUNCTION__, status);
}
static inline int