Skip to contentSkip to conversation

scsi: Use pci_enable_msix_range()

PATCH In review Alexander Gordeev 10 participants 40 messages Feb 4, 2014 – Feb 25, 2014

Subsystems (15)
lore
Share & tools
lore
#1 lore raw

PATCH 1/22 be2iscsi: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/be2iscsi/be_main.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/be2iscsi/be_main.c +3 -3
index 1f37505..5878f3e 100644
@@ -5284,9 +5284,9 @@ static void beiscsi_msix_enable(struct beiscsi_hba *phba)
 	for (i = 0; i <= phba->num_cpus; i++)
 		phba->msix_entries[i].entry = i;
 
-	status = pci_enable_msix(phba->pcidev, phba->msix_entries,
-				 (phba->num_cpus + 1));
-	if (!status)
+	status = pci_enable_msix_range(phba->pcidev, phba->msix_entries,
+				       phba->num_cpus + 1, phba->num_cpus + 1);
+	if (status > 0)
 		phba->msix_enabled = true;
 
 	return;
Signature · 1 line
1.7.7.6
#0 lore raw

cover scsi: Use pci_enable_msix_range()

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Alexander Gordeev (22):
be2iscsi: Use pci_enable_msix_range()
bfa: Do not call pci_enable_msix() once it failed
bfa: Cleanup bfad_setup_intr()
bfa: Use pci_enable_msix_range()
csiostor: Remove superfluous call to pci_disable_msix()
csiostor: Use pci_enable_msix_range()
fnic: Use pci_enable_msix_range()
hpsa: Fallback to MSI rather than to INTx if MSI-X failed
hpsa: Use pci_enable_msix_range()
isci: Use pci_enable_msix_range()
lpfc: Remove superfluous call to pci_disable_msix()
lpfc: Use pci_enable_msix_range()
megaraid: Use pci_enable_msix_range()
mpt2sas: Use pci_enable_msix_range()
mpt3sas: Use pci_enable_msix_range()
pm8001: Fix invalid success return when request_irq() failed
pm8001: Use pci_enable_msix_range()
pmcraid: Get rid of a redundant assignment
pmcraid: Use pci_enable_msix_range()
qla2xxx: Use pci_enable_msix_range()
qla4xxx: Use pci_enable_msix_range()
vmw_pvscsi: Use pci_enable_msix_range()

 drivers/scsi/be2iscsi/be_main.c           |    6 +-
 drivers/scsi/bfa/bfad.c                   |   62 ++++++++++++-----------------
 drivers/scsi/csiostor/csio_hw.h           |    2 +-
 drivers/scsi/csiostor/csio_isr.c          |   26 +++++-------
 drivers/scsi/fnic/fnic_isr.c              |    4 +-
 drivers/scsi/hpsa.c                       |   23 ++++------
 drivers/scsi/isci/init.c                  |    5 +-
 drivers/scsi/lpfc/lpfc_init.c             |   30 +++++++-------
 drivers/scsi/megaraid/megaraid_sas_base.c |   25 +++++------
 drivers/scsi/mpt2sas/mpt2sas_base.c       |   11 +++--
 drivers/scsi/mpt3sas/mpt3sas_base.c       |    9 +++-
 drivers/scsi/pm8001/pm8001_init.c         |   46 +++++++++++----------
 drivers/scsi/pmcraid.c                    |   14 +------
 drivers/scsi/qla2xxx/qla_isr.c            |   27 +++++-------
 drivers/scsi/qla4xxx/ql4_nx.c             |    5 +-
 drivers/scsi/vmw_pvscsi.c                 |    4 +-
 16 files changed, 134 insertions(+), 165 deletions(-)
Signature · 1 line
1.7.7.6
#3 lore raw

PATCH 2/22 bfa: Do not call pci_enable_msix() once it failed

Function pci_enable_msix() should not be called again in case it threw a negative errno.

---
 drivers/scsi/bfa/bfad.c |   48 ++++++++++++++++++++++------------------------
 1 files changed, 23 insertions(+), 25 deletions(-)
drivers/scsi/bfa/bfad.c +23 -25
index 85ee9c0..9b3e407 100644
@@ -1235,33 +1235,31 @@ bfad_setup_intr(struct bfad_s *bfad)
 	   (bfa_asic_id_cb(pdev->device) && !msix_disable_cb)) {
 
 		error = pci_enable_msix(bfad->pcidev, msix_entries, bfad->nvec);
-		if (error) {
-			/* In CT1 & CT2, try to allocate just one vector */
-			if (bfa_asic_id_ctc(pdev->device)) {
-				printk(KERN_WARNING "bfa %s: trying one msix "
-				       "vector failed to allocate %d[%d]\n",
-				       bfad->pci_name, bfad->nvec, error);
-				bfad->nvec = 1;
-				error = pci_enable_msix(bfad->pcidev,
+		/* In CT1 & CT2, try to allocate just one vector */
+		if (error > 0 && bfa_asic_id_ctc(pdev->device)) {
+			printk(KERN_WARNING "bfa %s: trying one msix "
+			       "vector failed to allocate %d[%d]\n",
+			       bfad->pci_name, bfad->nvec, error);
+			bfad->nvec = 1;
+			error = pci_enable_msix(bfad->pcidev,
 						msix_entries, bfad->nvec);
-			}
+		}
 
-			/*
-			 * Only error number of vector is available.
-			 * We don't have a mechanism to map multiple
-			 * interrupts into one vector, so even if we
-			 * can try to request less vectors, we don't
-			 * know how to associate interrupt events to
-			 *  vectors. Linux doesn't duplicate vectors
-			 * in the MSIX table for this case.
-			 */
-			if (error) {
-				printk(KERN_WARNING "bfad%d: "
-				       "pci_enable_msix failed (%d), "
-				       "use line based.\n",
-					bfad->inst_no, error);
-				goto line_based;
-			}
+		/*
+		 * Only error number of vector is available.
+		 * We don't have a mechanism to map multiple
+		 * interrupts into one vector, so even if we
+		 * can try to request less vectors, we don't
+		 * know how to associate interrupt events to
+		 *  vectors. Linux doesn't duplicate vectors
+		 * in the MSIX table for this case.
+		 */
+		if (error) {
+			printk(KERN_WARNING "bfad%d: "
+			       "pci_enable_msix failed (%d), "
+			       "use line based.\n",
+				bfad->inst_no, error);
+			goto line_based;
 		}
 
 		/* Disable INTX in MSI-X mode */
Signature · 1 line
1.7.7.6
#5 lore raw

PATCH 3/22 bfa: Cleanup bfad_setup_intr()

In reply to Alexander Gordeev
---
 drivers/scsi/bfa/bfad.c |   18 ++++++++----------
 1 files changed, 8 insertions(+), 10 deletions(-)
drivers/scsi/bfa/bfad.c +8 -10
index 9b3e407..cd318f1 100644
@@ -1219,7 +1219,7 @@ bfad_install_msix_handler(struct bfad_s *bfad)
 int
 bfad_setup_intr(struct bfad_s *bfad)
 {
-	int error = 0;
+	int error;
 	u32 mask = 0, i, num_bit = 0, max_bit = 0;
 	struct msix_entry msix_entries[MAX_MSIX_ENTRY];
 	struct pci_dev *pdev = bfad->pcidev;
@@ -1279,20 +1279,18 @@ bfad_setup_intr(struct bfad_s *bfad)
 
 		bfad->bfad_flags |= BFAD_MSIX_ON;
 
-		return error;
+		return 0;
 	}
 
 line_based:
-	error = 0;
-	if (request_irq
-	    (bfad->pcidev->irq, (irq_handler_t) bfad_intx, BFAD_IRQ_FLAGS,
-	     BFAD_DRIVER_NAME, bfad) != 0) {
-		/* Enable interrupt handler failed */
-		return 1;
-	}
+	error = request_irq(bfad->pcidev->irq, (irq_handler_t)bfad_intx,
+			    BFAD_IRQ_FLAGS, BFAD_DRIVER_NAME, bfad);
+	if (error)
+		return error;
+
 	bfad->bfad_flags |= BFAD_INTX_ON;
 
-	return error;
+	return 0;
 }
 
 void
Signature · 1 line
1.7.7.6
#6 lore raw

PATCH 4/22 bfa: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/bfa/bfad.c |   20 ++++++--------------
 1 files changed, 6 insertions(+), 14 deletions(-)
drivers/scsi/bfa/bfad.c +6 -14
index cd318f1..ee7442e 100644
@@ -1234,27 +1234,19 @@ bfad_setup_intr(struct bfad_s *bfad)
 	if ((bfa_asic_id_ctc(pdev->device) && !msix_disable_ct) ||
 	   (bfa_asic_id_cb(pdev->device) && !msix_disable_cb)) {
 
-		error = pci_enable_msix(bfad->pcidev, msix_entries, bfad->nvec);
+		error = pci_enable_msix_range(bfad->pcidev, msix_entries,
+					      bfad->nvec, bfad->nvec);
 		/* In CT1 & CT2, try to allocate just one vector */
-		if (error > 0 && bfa_asic_id_ctc(pdev->device)) {
+		if (error == -ENOSPC && bfa_asic_id_ctc(pdev->device)) {
 			printk(KERN_WARNING "bfa %s: trying one msix "
 			       "vector failed to allocate %d[%d]\n",
 			       bfad->pci_name, bfad->nvec, error);
 			bfad->nvec = 1;
-			error = pci_enable_msix(bfad->pcidev,
-						msix_entries, bfad->nvec);
+			error = pci_enable_msix_range(bfad->pcidev,
+						      msix_entries, 1, 1);
 		}
 
-		/*
-		 * Only error number of vector is available.
-		 * We don't have a mechanism to map multiple
-		 * interrupts into one vector, so even if we
-		 * can try to request less vectors, we don't
-		 * know how to associate interrupt events to
-		 *  vectors. Linux doesn't duplicate vectors
-		 * in the MSIX table for this case.
-		 */
-		if (error) {
+		if (error < 0) {
 			printk(KERN_WARNING "bfad%d: "
 			       "pci_enable_msix failed (%d), "
 			       "use line based.\n",
Signature · 1 line
1.7.7.6
#8 lore raw

PATCH 6/22 csiostor: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/csiostor/csio_hw.h  |    2 +-
 drivers/scsi/csiostor/csio_isr.c |   24 ++++++++++--------------
 2 files changed, 11 insertions(+), 15 deletions(-)
drivers/scsi/csiostor/csio_hw.h +1 -1
index 49b1daa..5db2d85 100644
@@ -94,7 +94,7 @@ enum {
 };
 
 struct csio_msix_entries {
-	unsigned short	vector;		/* Vector assigned by pci_enable_msix */
+	unsigned short	vector;		/* Assigned MSI-X vector */
 	void		*dev_id;	/* Priv object associated w/ this msix*/
 	char		desc[24];	/* Description of this vector */
 };
drivers/scsi/csiostor/csio_isr.c +10 -14
index 91ba91d..06f283f 100644
@@ -499,7 +499,7 @@ csio_reduce_sqsets(struct csio_hw *hw, int cnt)
 static int
 csio_enable_msix(struct csio_hw *hw)
 {
-	int rv, i, j, k, n, min, cnt;
+	int i, j, k, n, min, cnt;
 	struct csio_msix_entries *entryp;
 	struct msix_entry *entries;
 	int extra = CSIO_EXTRA_VECS;
@@ -521,19 +521,15 @@ csio_enable_msix(struct csio_hw *hw)
 
 	csio_dbg(hw, "FW supp #niq:%d, trying %d msix's\n", hw->cfg_niq, cnt);
 
-	while ((rv = pci_enable_msix(hw->pdev, entries, cnt)) >= min)
-		cnt = rv;
-	if (!rv) {
-		if (cnt < (hw->num_sqsets + extra)) {
-			csio_dbg(hw, "Reducing sqsets to %d\n", cnt - extra);
-			csio_reduce_sqsets(hw, cnt - extra);
-		}
-	} else {
-		if (rv > 0)
-			csio_info(hw, "Not using MSI-X, remainder:%d\n", rv);
-
+	cnt = pci_enable_msix_range(hw->pdev, entries, min, cnt);
+	if (cnt < 0) {
 		kfree(entries);
-		return -ENOMEM;
+		return cnt;
+	}
+
+	if (cnt < (hw->num_sqsets + extra)) {
+		csio_dbg(hw, "Reducing sqsets to %d\n", cnt - extra);
+		csio_reduce_sqsets(hw, cnt - extra);
 	}
 
 	/* Save off vectors */
@@ -585,7 +581,7 @@ csio_intr_enable(struct csio_hw *hw)
 			}
 		}
 
-		if ((csio_msi == 1) && !pci_enable_msi(hw->pdev))
+		if ((csio_msi == 1) && pci_enable_msi_range(hw->pdev, 1, 1) > 0)
 			hw->intr_mode = CSIO_IM_MSI;
 		else
 			hw->intr_mode = CSIO_IM_INTX;
Signature · 1 line
1.7.7.6
#9 lore raw

PATCH 7/22 fnic: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/fnic/fnic_isr.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/fnic/fnic_isr.c +2 -2
index 7d9b54a..0031c3e 100644
@@ -257,8 +257,8 @@ int fnic_set_intr_mode(struct fnic *fnic)
 	    fnic->raw_wq_count >= m &&
 	    fnic->wq_copy_count >= o &&
 	    fnic->cq_count >= n + m + o) {
-		if (!pci_enable_msix(fnic->pdev, fnic->msix_entry,
-				    n + m + o + 1)) {
+		if (pci_enable_msix_range(fnic->pdev, fnic->msix_entry,
+				          n + m + o + 1, n + m + o + 1) > 0) {
 			fnic->rq_count = n;
 			fnic->raw_wq_count = m;
 			fnic->wq_copy_count = o;
Signature · 1 line
1.7.7.6
#13 lore raw

PATCH 10/22 isci: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/isci/init.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/isci/init.c +3 -2
index d25d0d8..b99f307 100644
@@ -356,8 +356,9 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
 	for (i = 0; i < num_msix; i++)
 		pci_info->msix_entries[i].entry = i;
 
-	err = pci_enable_msix(pdev, pci_info->msix_entries, num_msix);
-	if (err)
+	err = pci_enable_msix_range(pdev,
+				    pci_info->msix_entries, num_msix, num_msix);
+	if (err < 0)
 		goto intx;
 
 	for (i = 0; i < num_msix; i++) {
Signature · 1 line
1.7.7.6
#15 lore raw

PATCH 11/22 lpfc: Remove superfluous call to pci_disable_msix()

In reply to Alexander Gordeev
---
 drivers/scsi/lpfc/lpfc_init.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)
drivers/scsi/lpfc/lpfc_init.c +6 -3
index 68c94cc..a9df97a 100644
@@ -8078,7 +8078,7 @@ lpfc_sli_enable_msix(struct lpfc_hba *phba)
 	if (rc) {
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"0420 PCI enable MSI-X failed (%d)\n", rc);
-		goto msi_fail_out;
+		goto vec_fail_out;
 	}
 	for (i = 0; i < LPFC_MSIX_VECTORS; i++)
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
@@ -8156,6 +8156,8 @@ irq_fail_out:
 msi_fail_out:
 	/* Unconfigure MSI-X capability structure */
 	pci_disable_msix(phba->pcidev);
+
+vec_fail_out:
 	return rc;
 }
 
@@ -8644,7 +8646,7 @@ enable_msix_vectors:
 	} else if (rc) {
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"0484 PCI enable MSI-X failed (%d)\n", rc);
-		goto msi_fail_out;
+		goto vec_fail_out;
 	}
 
 	/* Log MSI-X vector assignment */
@@ -8696,9 +8698,10 @@ cfg_fail_out:
 			 &phba->sli4_hba.fcp_eq_hdl[index]);
 	}
 
-msi_fail_out:
 	/* Unconfigure MSI-X capability structure */
 	pci_disable_msix(phba->pcidev);
+
+vec_fail_out:
 	return rc;
 }
 
Signature · 1 line
1.7.7.6
#18 lore raw

PATCH 12/22 lpfc: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/lpfc/lpfc_init.c |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)
drivers/scsi/lpfc/lpfc_init.c +9 -12
index a9df97a..5bb40ca 100644
@@ -8187,8 +8187,8 @@ lpfc_sli_disable_msix(struct lpfc_hba *phba)
  * @phba: pointer to lpfc hba data structure.
  *
  * This routine is invoked to enable the MSI interrupt mode to device with
- * SLI-3 interface spec. The kernel function pci_enable_msi() is called to
- * enable the MSI vector. The device driver is responsible for calling the
+ * SLI-3 interface spec. The kernel function pci_enable_msi_range() is called
+ * to enable the MSI vector. The device driver is responsible for calling the
  * request_irq() to register MSI vector with a interrupt the handler, which
  * is done in this function.
  *
@@ -8201,8 +8201,8 @@ lpfc_sli_enable_msi(struct lpfc_hba *phba)
 {
 	int rc;
 
-	rc = pci_enable_msi(phba->pcidev);
-	if (!rc)
+	rc = pci_enable_msi_range(phba->pcidev, 1, 1);
+	if (rc > 0)
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"0462 PCI enable MSI mode success.\n");
 	else {
@@ -8636,17 +8636,14 @@ lpfc_sli4_enable_msix(struct lpfc_hba *phba)
 		phba->sli4_hba.msix_entries[index].entry = index;
 
 	/* Configure MSI-X capability structure */
-	vectors = phba->cfg_fcp_io_channel;
-enable_msix_vectors:
-	rc = pci_enable_msix(phba->pcidev, phba->sli4_hba.msix_entries,
-			     vectors);
-	if (rc > 1) {
-		vectors = rc;
-		goto enable_msix_vectors;
-	} else if (rc) {
+	rc = pci_enable_msix_range(phba->pcidev, phba->sli4_hba.msix_entries,
+				   2, phba->cfg_fcp_io_channel);
+	if (rc < 0) {
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"0484 PCI enable MSI-X failed (%d)\n", rc);
 		goto vec_fail_out;
+	} else {
+		vectors = rc;
 	}
 
 	/* Log MSI-X vector assignment */
Signature · 1 line
1.7.7.6
#19 lore raw

PATCH 13/22 megaraid: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/megaraid/megaraid_sas_base.c |   25 +++++++++++--------------
 1 files changed, 11 insertions(+), 14 deletions(-)
drivers/scsi/megaraid/megaraid_sas_base.c +11 -14
index 3b7ad10..90944f1 100644
@@ -3731,18 +3731,12 @@ static int megasas_init_fw(struct megasas_instance *instance)
 					     (unsigned int)num_online_cpus());
 		for (i = 0; i < instance->msix_vectors; i++)
 			instance->msixentry[i].entry = i;
-		i = pci_enable_msix(instance->pdev, instance->msixentry,
-				    instance->msix_vectors);
-		if (i >= 0) {
-			if (i) {
-				if (!pci_enable_msix(instance->pdev,
-						     instance->msixentry, i))
-					instance->msix_vectors = i;
-				else
-					instance->msix_vectors = 0;
-			}
-		} else
+		i = pci_enable_msix_range(instance->pdev, instance->msixentry,
+					  1, instance->msix_vectors);
+		if (i < 0)
 			instance->msix_vectors = 0;
+		else
+			instance->msix_vectors = i;
 
 		dev_info(&instance->pdev->dev, "[scsi%d]: FW supports"
 			"<%d> MSIX vector,Online CPUs: <%d>,"
@@ -4667,9 +4661,11 @@ megasas_resume(struct pci_dev *pdev)
 		goto fail_ready_state;
 
 	/* Now re-enable MSI-X */
-	if (instance->msix_vectors)
-		pci_enable_msix(instance->pdev, instance->msixentry,
-				instance->msix_vectors);
+	if (instance->msix_vectors &&
+	    pci_enable_msix_range(instance->pdev, instance->msixentry,
+				  instance->msix_vectors,
+				  instance->msix_vectors) < 0)
+		goto fail_reenable_msix;
 
 	switch (instance->pdev->device) {
 	case PCI_DEVICE_ID_LSI_FUSION:
@@ -4756,6 +4752,7 @@ fail_init_mfi:
 
 fail_set_dma_mask:
 fail_ready_state:
+fail_reenable_msix:
 
 	pci_disable_device(pdev);
 
Signature · 1 line
1.7.7.6
#21 lore raw

PATCH 14/22 mpt2sas: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/mpt2sas/mpt2sas_base.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)
drivers/scsi/mpt2sas/mpt2sas_base.c +7 -4
index 3901edc..a0662cb 100644
@@ -1432,10 +1432,13 @@ _base_enable_msix(struct MPT2SAS_ADAPTER *ioc)
 	for (i = 0, a = entries; i < ioc->reply_queue_count; i++, a++)
 		a->entry = i;
 
-	r = pci_enable_msix(ioc->pdev, entries, ioc->reply_queue_count);
-	if (r) {
-		dfailprintk(ioc, printk(MPT2SAS_INFO_FMT "pci_enable_msix "
-		    "failed (r=%d) !!!\n", ioc->name, r));
+	r = pci_enable_msix_range(ioc->pdev,
+				  entries,
+				  ioc->reply_queue_count,
+				  ioc->reply_queue_count);
+	if (r < 0) {
+		dfailprintk(ioc, printk(MPT2SAS_INFO_FMT
+		    "pci_enable_msix_range failed (r=%d) !!!\n", ioc->name, r));
 		kfree(entries);
 		goto try_ioapic;
 	}
Signature · 1 line
1.7.7.6
#23 lore raw

PATCH 15/22 mpt3sas: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/mpt3sas/mpt3sas_base.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)
drivers/scsi/mpt3sas/mpt3sas_base.c +6 -3
index fa78506..46f1fba 100644
@@ -1747,10 +1747,13 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
 	for (i = 0, a = entries; i < ioc->reply_queue_count; i++, a++)
 		a->entry = i;
 
-	r = pci_enable_msix(ioc->pdev, entries, ioc->reply_queue_count);
-	if (r) {
+	r = pci_enable_msix_range(ioc->pdev,
+				  entries,
+				  ioc->reply_queue_count,
+				  ioc->reply_queue_count);
+	if (r < 0) {
 		dfailprintk(ioc, pr_info(MPT3SAS_FMT
-			"pci_enable_msix failed (r=%d) !!!\n",
+			"pci_enable_msix_range failed (r=%d) !!!\n",
 			ioc->name, r));
 		kfree(entries);
 		goto try_ioapic;
Signature · 1 line
1.7.7.6
#28 lore raw

PATCH 18/22 pmcraid: Get rid of a redundant assignment

In reply to Alexander Gordeev
---
 drivers/scsi/pmcraid.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/scsi/pmcraid.c +0 -1
index be8ce54..c06af7f 100644
@@ -4746,7 +4746,6 @@ pmcraid_isr_legacy:
 	pinstance->hrrq_vector[0].drv_inst = pinstance;
 	pinstance->hrrq_vector[0].vector = pdev->irq;
 	pinstance->num_hrrq = 1;
-	rc = 0;
 
 	rc = request_irq(pdev->irq, pmcraid_isr, IRQF_SHARED,
 			 PMCRAID_DRIVER_NAME, &pinstance->hrrq_vector[0]);
Signature · 1 line
1.7.7.6
#26 lore raw

PATCH 17/22 pm8001: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/pm8001/pm8001_init.c |   47 +++++++++++++++++++------------------
 1 files changed, 24 insertions(+), 23 deletions(-)
drivers/scsi/pm8001/pm8001_init.c +24 -23
index efffbb9..2d4b06e 100644
@@ -724,34 +724,35 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
 		sizeof(pm8001_ha->msix_entries[0]);
 	for (i = 0; i < max_entry ; i++)
 		pm8001_ha->msix_entries[i].entry = i;
-	rc = pci_enable_msix(pm8001_ha->pdev, pm8001_ha->msix_entries,
-		number_of_intr);
+	rc = pci_enable_msix_range(pm8001_ha->pdev, pm8001_ha->msix_entries,
+		number_of_intr, number_of_intr);
 	pm8001_ha->number_of_intr = number_of_intr;
-	if (!rc) {
-		PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
-			"pci_enable_msix request ret:%d no of intr %d\n",
-					rc, pm8001_ha->number_of_intr));
-
-
-		for (i = 0; i < number_of_intr; i++) {
-			snprintf(intr_drvname[i], sizeof(intr_drvname[0]),
-					DRV_NAME"%d", i);
-			pm8001_ha->irq_vector[i].irq_id = i;
-			pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
-
-			rc = request_irq(pm8001_ha->msix_entries[i].vector,
-				pm8001_interrupt_handler_msix, flag,
-				intr_drvname[i], &(pm8001_ha->irq_vector[i]));
-			if (rc) {
-				for (j = 0; j < i; j++)
-					free_irq(
-					pm8001_ha->msix_entries[j].vector,
+	if (rc < 0)
+		return rc;
+
+	PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+		"pci_enable_msix request ret:%d no of intr %d\n",
+				rc, pm8001_ha->number_of_intr));
+
+	for (i = 0; i < number_of_intr; i++) {
+		snprintf(intr_drvname[i], sizeof(intr_drvname[0]),
+				DRV_NAME"%d", i);
+		pm8001_ha->irq_vector[i].irq_id = i;
+		pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
+
+		rc = request_irq(pm8001_ha->msix_entries[i].vector,
+			pm8001_interrupt_handler_msix, flag,
+			intr_drvname[i], &(pm8001_ha->irq_vector[i]));
+		if (rc) {
+			for (j = 0; j < i; j++) {
+				free_irq(pm8001_ha->msix_entries[j].vector,
 					&(pm8001_ha->irq_vector[i]));
-				pci_disable_msix(pm8001_ha->pdev);
-				break;
 			}
+			pci_disable_msix(pm8001_ha->pdev);
+			break;
 		}
 	}
+
 	return rc;
 }
 #endif
Signature · 1 line
1.7.7.6
#30 lore raw

PATCH 19/22 pmcraid: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/pmcraid.c |   13 ++-----------
 1 files changed, 2 insertions(+), 11 deletions(-)
drivers/scsi/pmcraid.c +2 -11
index c06af7f..6d0f208 100644
@@ -4698,19 +4698,10 @@ pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance)
 		for (i = 0; i < PMCRAID_NUM_MSIX_VECTORS; i++)
 			entries[i].entry = i;
 
-		rc = pci_enable_msix(pdev, entries, num_hrrq);
-		if (rc < 0)
+		num_hrrq = pci_enable_msix_range(pdev, entries, 1, num_hrrq);
+		if (num_hrrq < 0)
 			goto pmcraid_isr_legacy;
 
-		/* Check how many MSIX vectors are allocated and register
-		 * msi-x handlers for each of them giving appropriate buffer
-		 */
-		if (rc > 0) {
-			num_hrrq = rc;
-			if (pci_enable_msix(pdev, entries, num_hrrq))
-				goto pmcraid_isr_legacy;
-		}
-
 		for (i = 0; i < num_hrrq; i++) {
 			pinstance->hrrq_vector[i].hrrq_id = i;
 			pinstance->hrrq_vector[i].drv_inst = pinstance;
Signature · 1 line
1.7.7.6
#32 lore raw

PATCH 20/22 qla2xxx: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Log message code 0x00c6 preserved, although it is reported after successful call to pci_enable_msix_range(), not before possibly unsuccessful call to pci_enable_msix(). Consumers of the error code should not notice the difference.

---
 drivers/scsi/qla2xxx/qla_isr.c |   27 +++++++++++----------------
 1 files changed, 11 insertions(+), 16 deletions(-)
drivers/scsi/qla2xxx/qla_isr.c +11 -16
index 9bc86b9..b2dcfa4 100644
@@ -2896,27 +2896,22 @@ qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp)
 	for (i = 0; i < ha->msix_count; i++)
 		entries[i].entry = i;
 
-	ret = pci_enable_msix(ha->pdev, entries, ha->msix_count);
-	if (ret) {
-		if (ret < MIN_MSIX_COUNT)
-			goto msix_failed;
-
+	ret = pci_enable_msix_range(ha->pdev,
+				    entries, MIN_MSIX_COUNT, ha->msix_count);
+	if (ret < 0) {
+		ql_log(ql_log_fatal, vha, 0x00c7,
+		    "MSI-X: Failed to enable support, "
+		    "giving   up -- %d/%d.\n",
+		    ha->msix_count, ret);
+		goto msix_out;
+	} else if (ret < ha->msix_count) {
 		ql_log(ql_log_warn, vha, 0x00c6,
 		    "MSI-X: Failed to enable support "
 		    "-- %d/%d\n Retry with %d vectors.\n",
 		    ha->msix_count, ret, ret);
-		ha->msix_count = ret;
-		ret = pci_enable_msix(ha->pdev, entries, ha->msix_count);
-		if (ret) {
-msix_failed:
-			ql_log(ql_log_fatal, vha, 0x00c7,
-			    "MSI-X: Failed to enable support, "
-			    "giving   up -- %d/%d.\n",
-			    ha->msix_count, ret);
-			goto msix_out;
-		}
-		ha->max_rsp_queues = ha->msix_count - 1;
 	}
+	ha->msix_count = ret;
+	ha->max_rsp_queues = ha->msix_count - 1;
 	ha->msix_entries = kzalloc(sizeof(struct qla_msix_entry) *
 				ha->msix_count, GFP_KERNEL);
 	if (!ha->msix_entries) {
Signature · 1 line
1.7.7.6
#34 lore raw

PATCH 21/22 qla4xxx: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/qla4xxx/ql4_nx.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/qla4xxx/ql4_nx.c +3 -2
index d001202..7f5412d 100644
@@ -3805,8 +3805,9 @@ qla4_8xxx_enable_msix(struct scsi_qla_host *ha)
 	for (i = 0; i < QLA_MSIX_ENTRIES; i++)
 		entries[i].entry = qla4_8xxx_msix_entries[i].entry;
 
-	ret = pci_enable_msix(ha->pdev, entries, ARRAY_SIZE(entries));
-	if (ret) {
+	ret = pci_enable_msix_range(ha->pdev, entries,
+				    ARRAY_SIZE(entries), ARRAY_SIZE(entries));
+	if (ret < 0) {
 		ql4_printk(KERN_WARNING, ha,
 		    "MSI-X: Failed to enable support -- %d/%d\n",
 		    QLA_MSIX_ENTRIES, ret);
Signature · 1 line
1.7.7.6
#37 lore raw

PATCH 22/22 vmw_pvscsi: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/vmw_pvscsi.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/vmw_pvscsi.c +2 -2
index b9755ec..c521f8e 100644
@@ -1078,8 +1078,8 @@ static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter,
 	struct msix_entry entry = { 0, PVSCSI_VECTOR_COMPLETION };
 	int ret;
 
-	ret = pci_enable_msix(adapter->dev, &entry, 1);
-	if (ret)
+	ret = pci_enable_msix_range(adapter->dev, &entry, 1, 1);
+	if (ret < 0)
 		return ret;
 
 	*irq = entry.vector;
Signature · 1 line
1.7.7.6
#7 lore raw

PATCH 5/22 csiostor: Remove superfluous call to pci_disable_msix()

In reply to Alexander Gordeev
---
 drivers/scsi/csiostor/csio_isr.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/scsi/csiostor/csio_isr.c +1 -3
index 7ee9777..91ba91d 100644
@@ -529,10 +529,8 @@ csio_enable_msix(struct csio_hw *hw)
 			csio_reduce_sqsets(hw, cnt - extra);
 		}
 	} else {
-		if (rv > 0) {
-			pci_disable_msix(hw->pdev);
+		if (rv > 0)
 			csio_info(hw, "Not using MSI-X, remainder:%d\n", rv);
-		}
 
 		kfree(entries);
 		return -ENOMEM;
Signature · 1 line
1.7.7.6
#11 lore raw

PATCH 8/22 hpsa: Fallback to MSI rather than to INTx if MSI-X failed

In reply to Alexander Gordeev
---
 drivers/scsi/hpsa.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/hpsa.c +3 -2
index 868318a..68eec7a 100644
@@ -4180,13 +4180,14 @@ static void hpsa_interrupt_mode(struct ctlr_info *h)
 		if (err > 0) {
 			dev_warn(&h->pdev->dev, "only %d MSI-X vectors "
 			       "available\n", err);
-			goto default_int_mode;
+			goto single_msi_mode;
 		} else {
 			dev_warn(&h->pdev->dev, "MSI-X init failed %d\n",
 			       err);
-			goto default_int_mode;
+			goto single_msi_mode;
 		}
 	}
+single_msi_mode:
 	if (pci_find_capability(h->pdev, PCI_CAP_ID_MSI)) {
 		dev_info(&h->pdev->dev, "MSI\n");
 		if (!pci_enable_msi(h->pdev))
Signature · 1 line
1.7.7.6
#12 lore raw

PATCH 9/22 hpsa: Use pci_enable_msix_range()

In reply to Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/hpsa.c |   20 +++++++-------------
 1 files changed, 7 insertions(+), 13 deletions(-)
drivers/scsi/hpsa.c +7 -13
index 68eec7a..3323628 100644
@@ -4169,23 +4169,17 @@ static void hpsa_interrupt_mode(struct ctlr_info *h)
 		goto default_int_mode;
 	if (pci_find_capability(h->pdev, PCI_CAP_ID_MSIX)) {
 		dev_info(&h->pdev->dev, "MSIX\n");
-		err = pci_enable_msix(h->pdev, hpsa_msix_entries,
-						MAX_REPLY_QUEUES);
-		if (!err) {
-			for (i = 0; i < MAX_REPLY_QUEUES; i++)
-				h->intr[i] = hpsa_msix_entries[i].vector;
-			h->msix_vector = 1;
-			return;
-		}
-		if (err > 0) {
-			dev_warn(&h->pdev->dev, "only %d MSI-X vectors "
-			       "available\n", err);
-			goto single_msi_mode;
-		} else {
+		err = pci_enable_msix_range(h->pdev, hpsa_msix_entries,
+					    MAX_REPLY_QUEUES, MAX_REPLY_QUEUES);
+		if (err < 0) {
 			dev_warn(&h->pdev->dev, "MSI-X init failed %d\n",
 			       err);
 			goto single_msi_mode;
 		}
+		for (i = 0; i < MAX_REPLY_QUEUES; i++)
+			h->intr[i] = hpsa_msix_entries[i].vector;
+		h->msix_vector = 1;
+		return;
 	}
 single_msi_mode:
 	if (pci_find_capability(h->pdev, PCI_CAP_ID_MSI)) {
Signature · 1 line
1.7.7.6
#24 lore raw

PATCH 16/22 pm8001: Fix invalid success return when request_irq() failed

In reply to Alexander Gordeev

When enabling MSI-X if a call to request_irq() failed pm8001_setup_msix() still returns success. This udate fixes the described misbehaviour.

---
 drivers/scsi/pm8001/pm8001_init.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/pm8001/pm8001_init.c +3 -2
index 73a120d..efffbb9 100644
@@ -739,9 +739,10 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
 			pm8001_ha->irq_vector[i].irq_id = i;
 			pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
 
-			if (request_irq(pm8001_ha->msix_entries[i].vector,
+			rc = request_irq(pm8001_ha->msix_entries[i].vector,
 				pm8001_interrupt_handler_msix, flag,
-				intr_drvname[i], &(pm8001_ha->irq_vector[i]))) {
+				intr_drvname[i], &(pm8001_ha->irq_vector[i]));
+			if (rc) {
 				for (j = 0; j < i; j++)
 					free_irq(
 					pm8001_ha->msix_entries[j].vector,
Signature · 1 line
1.7.7.6
Acked-by on v1 16/22
#25 lore raw

Re: [PATCH 16/22] pm8001: Fix invalid success return when request_irq() failed

Quoted 21 lines · Alexander Gordeev

When enabling MSI-X if a call to request_irq() failed pm8001_setup_msix() still returns success. This udate fixes the described misbehaviour.

---
 drivers/scsi/pm8001/pm8001_init.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/pm8001/pm8001_init.c +0 -0
index 73a120d..efffbb9 100644
@@ -739,9 +739,10 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
 			pm8001_ha->irq_vector[i].irq_id = i;
 			pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;

drivers/scsi/pm8001/pm8001_init.c static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha) · line 748

Quoted 10 lines
drivers/scsi/pm8001/pm8001_init.c +3 -2
 
-			if (request_irq(pm8001_ha->msix_entries[i].vector,
+			rc = request_irq(pm8001_ha->msix_entries[i].vector,
 				pm8001_interrupt_handler_msix, flag,
-				intr_drvname[i], &(pm8001_ha->irq_vector[i]))) {
+				intr_drvname[i], &(pm8001_ha->irq_vector[i]));
+			if (rc) {
 				for (j = 0; j < i; j++)
 					free_irq(
 					pm8001_ha->msix_entries[j].vector,

Thanks, looks fine.

Acked-by on v1 17/22
#27 lore raw

Re: [PATCH 17/22] pm8001: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 69 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/pm8001/pm8001_init.c |   47 +++++++++++++++++++------------------
 1 files changed, 24 insertions(+), 23 deletions(-)
drivers/scsi/pm8001/pm8001_init.c +21 -22
index efffbb9..2d4b06e 100644
@@ -724,34 +724,35 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
 		sizeof(pm8001_ha->msix_entries[0]);
 	for (i = 0; i < max_entry ; i++)
 		pm8001_ha->msix_entries[i].entry = i;
-	rc = pci_enable_msix(pm8001_ha->pdev, pm8001_ha->msix_entries,
-		number_of_intr);
+	rc = pci_enable_msix_range(pm8001_ha->pdev, pm8001_ha->msix_entries,
+		number_of_intr, number_of_intr);
 	pm8001_ha->number_of_intr = number_of_intr;
-	if (!rc) {
-		PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
-			"pci_enable_msix request ret:%d no of intr %d\n",
-					rc, pm8001_ha->number_of_intr));
-
-
-		for (i = 0; i < number_of_intr; i++) {
-			snprintf(intr_drvname[i], sizeof(intr_drvname[0]),
-					DRV_NAME"%d", i);
-			pm8001_ha->irq_vector[i].irq_id = i;
-			pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
-
-			rc = request_irq(pm8001_ha->msix_entries[i].vector,
-				pm8001_interrupt_handler_msix, flag,
-				intr_drvname[i], &(pm8001_ha->irq_vector[i]));
-			if (rc) {
-				for (j = 0; j < i; j++)
-					free_irq(
-					pm8001_ha->msix_entries[j].vector,
+	if (rc < 0)
+		return rc;
+
+	PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+		"pci_enable_msix request ret:%d no of intr %d\n",
+				rc, pm8001_ha->number_of_intr));
+
+	for (i = 0; i < number_of_intr; i++) {
+		snprintf(intr_drvname[i], sizeof(intr_drvname[0]),
+				DRV_NAME"%d", i);
+		pm8001_ha->irq_vector[i].irq_id = i;
+		pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
+
+		rc = request_irq(pm8001_ha->msix_entries[i].vector,
+			pm8001_interrupt_handler_msix, flag,
+			intr_drvname[i], &(pm8001_ha->irq_vector[i]));
+		if (rc) {
+			for (j = 0; j < i; j++) {
+				free_irq(pm8001_ha->msix_entries[j].vector,
 					&(pm8001_ha->irq_vector[i]));
-				pci_disable_msix(pm8001_ha->pdev);

drivers/scsi/pm8001/pm8001_init.c static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha) · line 758

Quoted 10 lines
drivers/scsi/pm8001/pm8001_init.c +3 -1
-				break;
 			}
+			pci_disable_msix(pm8001_ha->pdev);
+			break;
 		}
 	}
+
 	return rc;
 }
 #endif

Thanks, looks fine.

Acked-by on v1 22/22
#38 lore raw

Re: [PATCH 22/22] vmw_pvscsi: Use pci_enable_msix_range()

In reply to Alexander Gordeev

Looks fine to me.

Thanks!
Arvind

----- Original Message -----
From: "Alexander Gordeev" <[email protected]>
To: [email protected]
Cc: "Alexander Gordeev" <[email protected]>, "Arvind Kumar" <[email protected]>, [email protected], [email protected], [email protected]
Sent: Tuesday, February 4, 2014 3:17:08 AM
Subject: [PATCH 22/22] vmw_pvscsi: Use pci_enable_msix_range()

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/vmw_pvscsi.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/vmw_pvscsi.c +2 -2
index b9755ec..c521f8e 100644
@@ -1078,8 +1078,8 @@ static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter,
 	struct msix_entry entry = { 0, PVSCSI_VECTOR_COMPLETION };
 	int ret;
 
-	ret = pci_enable_msix(adapter->dev, &entry, 1);
-	if (ret)
+	ret = pci_enable_msix_range(adapter->dev, &entry, 1, 1);
+	if (ret < 0)
 		return ret;
 
 	*irq = entry.vector;
Signature · 1 line
1.7.7.6
Acked-by on v1 1/22
#2 lore raw

RE: [PATCH 01/22] be2iscsi: Use pci_enable_msix_range()

In reply to Alexander Gordeev

-----Original Message-----
From: Alexander Gordeev [mailto:[email protected]]
Sent: Tuesday, February 04, 2014 3:17 AM
To: [email protected]
Cc: Alexander Gordeev; Jayamohan Kallickal; [email protected]; [email protected]
Subject: [PATCH 01/22] be2iscsi: Use pci_enable_msix_range()

As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/be2iscsi/be_main.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/be2iscsi/be_main.c +3 -3
@@ -5284,9 +5284,9 @@ static void beiscsi_msix_enable(struct beiscsi_hba *phba)
 	for (i = 0; i <= phba->num_cpus; i++)
 		phba->msix_entries[i].entry = i;
 
-	status = pci_enable_msix(phba->pcidev, phba->msix_entries,
-				 (phba->num_cpus + 1));
-	if (!status)
+	status = pci_enable_msix_range(phba->pcidev, phba->msix_entries,
+				       phba->num_cpus + 1, phba->num_cpus + 1);
+	if (status > 0)
 		phba->msix_enabled = true;
 
 	return;

Looks OK to me

--

Acked-by on v1 10/22
#14 lore raw

RE: [PATCH 10/22] isci: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 34 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
 drivers/scsi/isci/init.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/isci/init.c +3 -3
index d25d0d8..b99f307 100644
@@ -356,8 +356,9 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
 	for (i = 0; i < num_msix; i++)
 		pci_info->msix_entries[i].entry = i;
 
-	err = pci_enable_msix(pdev, pci_info->msix_entries, num_msix);
-	if (err)
+	err = pci_enable_msix_range(pdev,
+				    pci_info->msix_entries, num_msix, num_msix);
+	if (err < 0)
 		goto intx;
 
 	for (i = 0; i < num_msix; i++) {
--
Quoted 1 line

1.7.7.6

Looks fine.

Thanks,
Lukasz

Acked-by on v1 13/22
#20 lore raw

RE: [PATCH 13/22] megaraid: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 75 lines

-----Original Message-----
From: Alexander Gordeev [mailto:[email protected]]
Sent: Tuesday, February 04, 2014 4:47 PM
To: [email protected]
Cc: Alexander Gordeev; DL-MegaRAID Linux; [email protected]; [email protected]
Subject: [PATCH 13/22] megaraid: Use pci_enable_msix_range()

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
drivers/scsi/megaraid/megaraid_sas_base.c | 25 +++++++++++--------------

1 files changed, 11 insertions(+), 14 deletions(-)
drivers/scsi/megaraid/megaraid_sas_base.c +5 -11
index 3b7ad10..90944f1 100644
@@ -3731,18 +3731,12 @@ static int megasas_init_fw(struct
 megasas_instance *instance)
 					     (unsigned int)num_online_cpus());
 		for (i = 0; i < instance->msix_vectors; i++)
 			instance->msixentry[i].entry = i;
-		i = pci_enable_msix(instance->pdev, instance->msixentry,
-				    instance->msix_vectors);
-		if (i >= 0) {
-			if (i) {
-				if (!pci_enable_msix(instance->pdev,
-						     instance->msixentry, i))
-					instance->msix_vectors = i;
-				else
-					instance->msix_vectors = 0;
-			}
-		} else
+		i = pci_enable_msix_range(instance->pdev, instance-
 >msixentry,
+					  1, instance->msix_vectors);
+		if (i < 0)
 			instance->msix_vectors = 0;
+		else
+			instance->msix_vectors = i;
 
		dev_info(&instance->pdev->dev, "[scsi%d]: FW supports"
			"<%d> MSIX vector,Online CPUs: <%d>,"
drivers/scsi/megaraid/megaraid_sas_base.c +5 -3
@@ -4667,9 +4661,11 @@ megasas_resume(struct pci_dev *pdev)
 		goto fail_ready_state;
 
 	/* Now re-enable MSI-X */
-	if (instance->msix_vectors)
-		pci_enable_msix(instance->pdev, instance->msixentry,
-				instance->msix_vectors);
+	if (instance->msix_vectors &&
+	    pci_enable_msix_range(instance->pdev, instance->msixentry,
+				  instance->msix_vectors,
+				  instance->msix_vectors) < 0)
+		goto fail_reenable_msix;
 
 	switch (instance->pdev->device) {
 	case PCI_DEVICE_ID_LSI_FUSION:
@@ -4756,6 +4752,7 @@ fail_init_mfi:
 

fail_set_dma_mask:
fail_ready_state:
+fail_reenable_msix:

Quoted 1 line
	pci_disable_device(pdev);

Sumit

Quoted 4 lines

--
1.7.7.6

#10 lore raw

Re: [PATCH 07/22] fnic: Use pci_enable_msix_range()

In reply to Alexander Gordeev

Hi Alexander

The changes look good to me. Thanks for taking care of this

-Suma

Quoted 34 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
drivers/scsi/fnic/fnic_isr.c | 4 ++--

1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/fnic/fnic_isr.c +2 -2
index 7d9b54a..0031c3e 100644
@@ -257,8 +257,8 @@ int fnic_set_intr_mode(struct fnic *fnic)
 	    fnic->raw_wq_count >= m &&
 	    fnic->wq_copy_count >= o &&
 	    fnic->cq_count >= n + m + o) {
-		if (!pci_enable_msix(fnic->pdev, fnic->msix_entry,
-				    n + m + o + 1)) {
+		if (pci_enable_msix_range(fnic->pdev, fnic->msix_entry,
+				          n + m + o + 1, n + m + o + 1) > 0) {
 			fnic->rq_count = n;
 			fnic->raw_wq_count = m;
 			fnic->wq_copy_count = o;
Signature · 1 line
1.7.7.6
#4 lore raw

Re: [PATCH 02/22] bfa: Do not call pci_enable_msix() once it failed

In reply to Alexander Gordeev
Quoted 2 lines · Alexander Gordeev

Function pci_enable_msix() should not be called again in case it threw a negative errno.

Anil, Vijaya,

Any feedback on bfa patches?

Thanks!

Signature · 3 lines
Regards,
Alexander Gordeev
[email protected]
#22 lore raw

Re: [PATCH 14/22] mpt2sas: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 5 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Nagalakshmi, Sreekanth,

Any feedback?

Thanks!

Signature · 3 lines
Regards,
Alexander Gordeev
[email protected]
#35 lore raw

Re: [PATCH 21/22] qla4xxx: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 5 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Hi Vikas,

Any feedback on this?

Thanks!

Signature · 3 lines
Regards,
Alexander Gordeev
[email protected]
#31 lore raw

Re: [PATCH 19/22] pmcraid: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 5 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Hi Anil,

Any feedback?

Thanks!

Signature · 3 lines
Regards,
Alexander Gordeev
[email protected]
Acked-by on v1 21/22
#36 lore raw

Re: [PATCH 21/22] qla4xxx: Use pci_enable_msix_range()

In reply to Alexander Gordeev
Quoted 21 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

---
drivers/scsi/qla4xxx/ql4_nx.c | 5 +++--

1 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/qla4xxx/ql4_nx.c +0 -0
index d001202..7f5412d 100644
@@ -3805,8 +3805,9 @@ qla4_8xxx_enable_msix(struct scsi_qla_host *ha)
 	for (i = 0; i < QLA_MSIX_ENTRIES; i++)

drivers/scsi/qla4xxx/ql4_nx.c qla4_8xxx_enable_msix(struct scsi_qla_host *ha) · line 3813

Quoted 10 lines
drivers/scsi/qla4xxx/ql4_nx.c +3 -2
 		entries[i].entry = qla4_8xxx_msix_entries[i].entry;
 
-	ret = pci_enable_msix(ha->pdev, entries, ARRAY_SIZE(entries));
-	if (ret) {
+	ret = pci_enable_msix_range(ha->pdev, entries,
+				    ARRAY_SIZE(entries), ARRAY_SIZE(entries));
+	if (ret < 0) {
 		ql4_printk(KERN_WARNING, ha,
 		    "MSI-X: Failed to enable support -- %d/%d\n",
 		    QLA_MSIX_ENTRIES, ret);

Looks good to me.

#39 lore raw
In reply to Alexander Gordeev
Quoted 5 lines · Alexander Gordeev

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Hi James,

What is the process to get these patches accepted to scsi.git tree? Should I make some extra effort besides just posting the series this way?

Thanks!

Signature · 3 lines
Regards,
Alexander Gordeev
[email protected]
Acked-by on v1 11/22
#17 lore raw

Re: [PATCH 11/22] lpfc: Remove superfluous call to pci_disable_msix()

In reply to Alexander Gordeev

Hi Alexander,

The change is fine - but not really necessary. The pci_disable_msix() call explicitly checks for enablement so it's safe.

It really is a superfluous change - but if James wants to take it:

-- james s

Quoted 51 lines · Alexander Gordeev
---
  drivers/scsi/lpfc/lpfc_init.c |    9 ++++++---
  1 files changed, 6 insertions(+), 3 deletions(-)
drivers/scsi/lpfc/lpfc_init.c +6 -3
index 68c94cc..a9df97a 100644
@@ -8078,7 +8078,7 @@ lpfc_sli_enable_msix(struct lpfc_hba *phba)
  	if (rc) {
  		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
  				"0420 PCI enable MSI-X failed (%d)\n", rc);
-		goto msi_fail_out;
+		goto vec_fail_out;
  	}
  	for (i = 0; i < LPFC_MSIX_VECTORS; i++)
  		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
@@ -8156,6 +8156,8 @@ irq_fail_out:
  msi_fail_out:
  	/* Unconfigure MSI-X capability structure */
  	pci_disable_msix(phba->pcidev);
+
+vec_fail_out:
  	return rc;
  }
 
@@ -8644,7 +8646,7 @@ enable_msix_vectors:
  	} else if (rc) {
  		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
  				"0484 PCI enable MSI-X failed (%d)\n", rc);
-		goto msi_fail_out;
+		goto vec_fail_out;
  	}
 
  	/* Log MSI-X vector assignment */
@@ -8696,9 +8698,10 @@ cfg_fail_out:
  			 &phba->sli4_hba.fcp_eq_hdl[index]);
  	}
 
-msi_fail_out:
  	/* Unconfigure MSI-X capability structure */
  	pci_disable_msix(phba->pcidev);
+
+vec_fail_out:
  	return rc;
  }
 
Acked-by on v1 20/22
#33 lore raw

Re: [PATCH 20/22] qla2xxx: Use pci_enable_msix_range()

In reply to Alexander Gordeev

Looks good to me.

Quoted 67 lines

As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.

Log message code 0x00c6 preserved, although it is reported after successful call to pci_enable_msix_range(), not before possibly unsuccessful call to pci_enable_msix(). Consumers of the error code should not notice the difference.

---
drivers/scsi/qla2xxx/qla_isr.c | 27 +++++++++++----------------

1 files changed, 11 insertions(+), 16 deletions(-)
drivers/scsi/qla2xxx/qla_isr.c +11 -16
index 9bc86b9..b2dcfa4 100644
@@ -2896,27 +2896,22 @@ qla24xx_enable_msix(struct qla_hw_data *ha,
 struct rsp_que *rsp)
 	for (i = 0; i < ha->msix_count; i++)
 		entries[i].entry = i;
 
-	ret = pci_enable_msix(ha->pdev, entries, ha->msix_count);
-	if (ret) {
-		if (ret < MIN_MSIX_COUNT)
-			goto msix_failed;
-
+	ret = pci_enable_msix_range(ha->pdev,
+				    entries, MIN_MSIX_COUNT, ha->msix_count);
+	if (ret < 0) {
+		ql_log(ql_log_fatal, vha, 0x00c7,
+		    "MSI-X: Failed to enable support, "
+		    "giving   up -- %d/%d.\n",
+		    ha->msix_count, ret);
+		goto msix_out;
+	} else if (ret < ha->msix_count) {
 		ql_log(ql_log_warn, vha, 0x00c6,
 		    "MSI-X: Failed to enable support "
 		    "-- %d/%d\n Retry with %d vectors.\n",
 		    ha->msix_count, ret, ret);
-		ha->msix_count = ret;
-		ret = pci_enable_msix(ha->pdev, entries, ha->msix_count);
-		if (ret) {
-msix_failed:
-			ql_log(ql_log_fatal, vha, 0x00c7,
-			    "MSI-X: Failed to enable support, "
-			    "giving   up -- %d/%d.\n",
-			    ha->msix_count, ret);
-			goto msix_out;
-		}
-		ha->max_rsp_queues = ha->msix_count - 1;
 	}
+	ha->msix_count = ret;
+	ha->max_rsp_queues = ha->msix_count - 1;
 	ha->msix_entries = kzalloc(sizeof(struct qla_msix_entry) *
 				ha->msix_count, GFP_KERNEL);
	if (!ha->msix_entries) {
Signature · 1 line
1.7.7.6