[SPARC64]: Fix VIRQ enabling.
authorDavid S. Miller <davem@davemloft.net>
Tue, 26 Jun 2007 07:13:09 +0000 (00:13 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Jun 2007 07:13:09 +0000 (00:13 -0700)
We were doing the wrong call to turn them on, and also
when enabling we need to forcefully set the state to IDLE.

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

index e60d283f60bc518d87aa8ec08363d40d719b9ab8..a862d13fc85748303b84497848046c1ad22a3e1e 100644 (file)
@@ -400,6 +400,12 @@ static void sun4v_virq_enable(unsigned int virt_irq)
                               "err(%d)\n",
                               dev_handle, dev_ino, cpuid, err);
                err = sun4v_vintr_set_state(dev_handle, dev_ino,
                               "err(%d)\n",
                               dev_handle, dev_ino, cpuid, err);
                err = sun4v_vintr_set_state(dev_handle, dev_ino,
+                                           HV_INTR_STATE_IDLE);
+               if (err != HV_EOK)
+                       printk("sun4v_vintr_set_state(%lx,%lx,"
+                               "HV_INTR_STATE_IDLE): err(%d)\n",
+                              dev_handle, dev_ino, err);
+               err = sun4v_vintr_set_valid(dev_handle, dev_ino,
                                            HV_INTR_ENABLED);
                if (err != HV_EOK)
                        printk("sun4v_vintr_set_state(%lx,%lx,"
                                            HV_INTR_ENABLED);
                if (err != HV_EOK)
                        printk("sun4v_vintr_set_state(%lx,%lx,"
@@ -420,7 +426,7 @@ static void sun4v_virq_disable(unsigned int virt_irq)
                dev_handle = ino & IMAP_IGN;
                dev_ino = ino & IMAP_INO;
 
                dev_handle = ino & IMAP_IGN;
                dev_ino = ino & IMAP_INO;
 
-               err = sun4v_vintr_set_state(dev_handle, dev_ino,
+               err = sun4v_vintr_set_valid(dev_handle, dev_ino,
                                            HV_INTR_DISABLED);
                if (err != HV_EOK)
                        printk("sun4v_vintr_set_state(%lx,%lx,"
                                            HV_INTR_DISABLED);
                if (err != HV_EOK)
                        printk("sun4v_vintr_set_state(%lx,%lx,"