OSDN Git Service

[SPARC64]: Two IRQ handling fixes.
authorDavid S. Miller <davem@sunset.davemloft.net>
Wed, 15 Feb 2006 09:18:19 +0000 (01:18 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 20 Mar 2006 09:13:02 +0000 (01:13 -0800)
On SUN4V, force IRQ state to idle in enable_irq().  However,
I'm still not sure this is %100 correct.

Call add_interrupt_randomness() on SUN4V too.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/irq.c

index c786d25..4d9931d 100644 (file)
@@ -164,6 +164,10 @@ void enable_irq(unsigned int irq)
                if (err != HV_EOK)
                        printk("sun4v_intr_setenabled(%x): err(%d)\n",
                               ino, err);
+               err = sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
+               if (err != HV_EOK)
+                       printk("sun4v_intr_setstate(%x): "
+                              "err(%d)\n", ino, err);
        } else {
                if (tlb_type == cheetah || tlb_type == cheetah_plus) {
                        unsigned long ver;
@@ -663,10 +667,11 @@ static void process_bucket(int irq, struct ino_bucket *bp, struct pt_regs *regs)
                                       "err(%d)\n", ino, err);
                } else {
                        upa_writel(ICLR_IDLE, bp->iclr);
-                       /* Test and add entropy */
-                       if (random & SA_SAMPLE_RANDOM)
-                               add_interrupt_randomness(irq);
                }
+
+               /* Test and add entropy */
+               if (random & SA_SAMPLE_RANDOM)
+                       add_interrupt_randomness(irq);
        }
 out:
        bp->flags &= ~IBF_INPROGRESS;