All pastes #367365 Raw Edit

Stuff

public text v1 · immutable
#367365 ·published 2007-02-22 09:19 UTC
rendered paste body
diff -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