[SCSI] qla4xxx: Prevent MSI/MSI-X falling back to INTx for ISP82XX
authorVikas Chaudhary <vikas.chaudhary@qlogic.com>
Thu, 20 Sep 2012 11:35:06 +0000 (07:35 -0400)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 24 Sep 2012 08:38:55 +0000 (12:38 +0400)
For ISP82xx mixed interrupt mode is not supported.
Hence prevent MSI/MSI-x from falling back to INTx mode.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla4xxx/ql4_isr.c

index 68bdb8c4d64c92dd3648c99d41ec7cd0128d73da..50503217b069c416ade29b2582d377a0647448e4 100644 (file)
@@ -1364,9 +1364,15 @@ try_msi:
                        pci_disable_msi(ha->pdev);
                }
        }
-       ql4_printk(KERN_WARNING, ha,
-           "MSI: Falling back-to INTx mode -- %d.\n", ret);
 
+       /*
+        * Prevent interrupts from falling back to INTx mode in cases where
+        * interrupts cannot get acquired through MSI-X or MSI mode.
+        */
+       if (is_qla8022(ha)) {
+               ql4_printk(KERN_WARNING, ha, "IRQ not attached -- %d.\n", ret);
+               goto irq_not_attached;
+       }
 try_intx:
        /* Trying INTx */
        ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler,
@@ -1380,7 +1386,7 @@ try_intx:
                ql4_printk(KERN_WARNING, ha,
                    "INTx: Failed to reserve interrupt %d already in"
                    " use.\n", ha->pdev->irq);
-               return ret;
+               goto irq_not_attached;
        }
 
 irq_attached:
@@ -1388,6 +1394,7 @@ irq_attached:
        ha->host->irq = ha->pdev->irq;
        ql4_printk(KERN_INFO, ha, "%s: irq %d attached\n",
            __func__, ha->pdev->irq);
+irq_not_attached:
        return ret;
 }