]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: snic: switch to pci_irq_alloc_vectors
authorChristoph Hellwig <hch@lst.de>
Wed, 1 Feb 2017 14:21:21 +0000 (15:21 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 16 Feb 2017 02:23:10 +0000 (21:23 -0500)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Narsimhulu Musini <nmusini@cisco.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/snic/snic.h
drivers/scsi/snic/snic_isr.c

index 8ed778d4dbb9688864b20a34afaf9e724022d953..de0ab5fc84742fd685d18c41dfd05a9ac1588df2 100644 (file)
@@ -299,7 +299,6 @@ struct snic {
 
        /* pci related */
        struct pci_dev *pdev;
-       struct msix_entry msix_entry[SNIC_MSIX_INTR_MAX];
        struct snic_msix_entry msix[SNIC_MSIX_INTR_MAX];
 
        /* io related info */
index f552003128c6e7899362012766d0eea4f7f6f1cd..d859501e4ccd3785ff4344d10eed83d4bd5f0190 100644 (file)
@@ -93,7 +93,7 @@ snic_free_intr(struct snic *snic)
        /* ONLY interrupt mode MSIX is supported */
        for (i = 0; i < ARRAY_SIZE(snic->msix); i++) {
                if (snic->msix[i].requested) {
-                       free_irq(snic->msix_entry[i].vector,
+                       free_irq(pci_irq_vector(snic->pdev, i),
                                 snic->msix[i].devid);
                }
        }
@@ -134,7 +134,7 @@ snic_request_intr(struct snic *snic)
        snic->msix[SNIC_MSIX_ERR_NOTIFY].devid = snic;
 
        for (i = 0; i < ARRAY_SIZE(snic->msix); i++) {
-               ret = request_irq(snic->msix_entry[i].vector,
+               ret = request_irq(pci_irq_vector(snic->pdev, i),
                                  snic->msix[i].isr,
                                  0,
                                  snic->msix[i].devname,
@@ -158,47 +158,37 @@ snic_set_intr_mode(struct snic *snic)
 {
        unsigned int n = ARRAY_SIZE(snic->wq);
        unsigned int m = SNIC_CQ_IO_CMPL_MAX;
-       unsigned int i;
+       unsigned int vecs = n + m + 1;
 
        /*
         * We need n WQs, m CQs, and n+m+1 INTRs
         * (last INTR is used for WQ/CQ errors and notification area
         */
-
        BUILD_BUG_ON((ARRAY_SIZE(snic->wq) + SNIC_CQ_IO_CMPL_MAX) >
                        ARRAY_SIZE(snic->intr));
-       SNIC_BUG_ON(ARRAY_SIZE(snic->msix_entry) < (n + m + 1));
-
-       for (i = 0; i < (n + m + 1); i++)
-               snic->msix_entry[i].entry = i;
-
-       if (snic->wq_count >= n && snic->cq_count >= (n + m)) {
-               if (!pci_enable_msix(snic->pdev,
-                                    snic->msix_entry,
-                                    (n + m + 1))) {
-                       snic->wq_count = n;
-                       snic->cq_count = n + m;
-                       snic->intr_count = n + m + 1;
-                       snic->err_intr_offset = SNIC_MSIX_ERR_NOTIFY;
-
-                       SNIC_ISR_DBG(snic->shost,
-                                    "Using MSI-X Interrupts\n");
-                       svnic_dev_set_intr_mode(snic->vdev,
-                                               VNIC_DEV_INTR_MODE_MSIX);
-
-                       return 0;
-               }
-       }
 
-       svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_UNKNOWN);
+       if (snic->wq_count < n || snic->cq_count < n + m)
+               goto fail;
 
+       if (pci_alloc_irq_vectors(snic->pdev, vecs, vecs, PCI_IRQ_MSIX) < 0)
+               goto fail;
+
+       snic->wq_count = n;
+       snic->cq_count = n + m;
+       snic->intr_count = vecs;
+       snic->err_intr_offset = SNIC_MSIX_ERR_NOTIFY;
+
+       SNIC_ISR_DBG(snic->shost, "Using MSI-X Interrupts\n");
+       svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_MSIX);
+       return 0;
+fail:
+       svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_UNKNOWN);
        return -EINVAL;
 } /* end of snic_set_intr_mode */
 
 void
 snic_clear_intr_mode(struct snic *snic)
 {
-       pci_disable_msix(snic->pdev);
-
+       pci_free_irq_vectors(snic->pdev);
        svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_INTX);
 }