All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 21:30   ` David Miller
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Michael Chan, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/broadcom/bnx2.c |   15 ++++-----------
 1 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index 9d2deda..3df63b2 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -6206,7 +6206,7 @@ bnx2_free_irq(struct bnx2 *bp)
 static void
 bnx2_enable_msix(struct bnx2 *bp, int msix_vecs)
 {
-	int i, total_vecs, rc;
+	int i, total_vecs;
 	struct msix_entry msix_ent[BNX2_MAX_MSIX_VEC];
 	struct net_device *dev = bp->dev;
 	const int len = sizeof(bp->irq_tbl[0].name);
@@ -6229,16 +6229,9 @@ bnx2_enable_msix(struct bnx2 *bp, int msix_vecs)
 #ifdef BCM_CNIC
 	total_vecs++;
 #endif
-	rc = -ENOSPC;
-	while (total_vecs >= BNX2_MIN_MSIX_VEC) {
-		rc = pci_enable_msix(bp->pdev, msix_ent, total_vecs);
-		if (rc <= 0)
-			break;
-		if (rc > 0)
-			total_vecs = rc;
-	}
-
-	if (rc != 0)
+	total_vecs = pci_enable_msix_range(bp->pdev, msix_ent,
+					   BNX2_MIN_MSIX_VEC, total_vecs);
+	if (total_vecs < 0)
 		return;
 
 	msix_vecs = total_vecs;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 02/34] bnx2x: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
  (?)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 19:11   ` Sergei Shtylyov
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Ariel Elior, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |   48 ++++++++++-------------
 1 files changed, 21 insertions(+), 27 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 9d7419e..b396d74 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1638,24 +1638,36 @@ int bnx2x_enable_msix(struct bnx2x *bp)
 	DP(BNX2X_MSG_SP, "about to request enable msix with %d vectors\n",
 	   msix_vec);
 
-	rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], msix_vec);
-
+	rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0],
+				   BNX2X_MIN_MSIX_VEC_CNT(bp), msix_vec);
 	/*
 	 * reconfigure number of tx/rx queues according to available
 	 * MSI-X vectors
 	 */
-	if (rc >= BNX2X_MIN_MSIX_VEC_CNT(bp)) {
+	if (rc < 0) {
+		BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
+		goto no_msix;
+	} else if (rc == -ENOSPC) {
+		/* Get by with single vector */
+		rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0], 1, 1);
+		if (rc < 0) {
+			BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n",
+				       rc);
+			goto no_msix;
+		}
+
+		BNX2X_DEV_INFO("Using single MSI-X vector\n");
+		bp->flags |= USING_SINGLE_MSIX_FLAG;
+
+		BNX2X_DEV_INFO("set number of queues to 1\n");
+		bp->num_ethernet_queues = 1;
+		bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
+	} else if (rc < msix_vec) {
 		/* how less vectors we will have? */
 		int diff = msix_vec - rc;
 
 		BNX2X_DEV_INFO("Trying to use less MSI-X vectors: %d\n", rc);
 
-		rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], rc);
-
-		if (rc) {
-			BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
-			goto no_msix;
-		}
 		/*
 		 * decrease number of queues by number of unallocated entries
 		 */
@@ -1664,24 +1676,6 @@ int bnx2x_enable_msix(struct bnx2x *bp)
 
 		BNX2X_DEV_INFO("New queue configuration set: %d\n",
 			       bp->num_queues);
-	} else if (rc > 0) {
-		/* Get by with single vector */
-		rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], 1);
-		if (rc) {
-			BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n",
-				       rc);
-			goto no_msix;
-		}
-
-		BNX2X_DEV_INFO("Using single MSI-X vector\n");
-		bp->flags |= USING_SINGLE_MSIX_FLAG;
-
-		BNX2X_DEV_INFO("set number of queues to 1\n");
-		bp->num_ethernet_queues = 1;
-		bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
-	} else if (rc < 0) {
-		BNX2X_DEV_INFO("MSI-X is not attainable  rc %d\n", rc);
-		goto no_msix;
 	}
 
 	bp->flags |= USING_MSIX_FLAG;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 03/34] tg3: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (2 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Nithin Nayak Sujir, Michael Chan, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/broadcom/tg3.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index e2ca03e..fca9996 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -11361,12 +11361,10 @@ static bool tg3_enable_msix(struct tg3 *tp)
 		msix_ent[i].vector = 0;
 	}
 
-	rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
+	rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
 	if (rc < 0) {
 		return false;
-	} else if (rc != 0) {
-		if (pci_enable_msix(tp->pdev, msix_ent, rc))
-			return false;
+	} else if (rc < tp->irq_cnt) {
 		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
 			      tp->irq_cnt, rc);
 		tp->irq_cnt = rc;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 04/34] bna: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (3 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Rasesh Mody, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/brocade/bna/bnad.c |   23 +++++++++--------------
 1 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index cf64f3d..bf436d0 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -2666,9 +2666,11 @@ bnad_enable_msix(struct bnad *bnad)
 	for (i = 0; i < bnad->msix_num; i++)
 		bnad->msix_table[i].entry = i;
 
-	ret = pci_enable_msix(bnad->pcidev, bnad->msix_table, bnad->msix_num);
-	if (ret > 0) {
-		/* Not enough MSI-X vectors. */
+	ret = pci_enable_msix_range(bnad->pcidev, bnad->msix_table,
+				    1, bnad->msix_num);
+	if (ret < 0) {
+		goto intx_mode;
+	} else if (ret < bnad->msix_num) {
 		pr_warn("BNA: %d MSI-X vectors allocated < %d requested\n",
 			ret, bnad->msix_num);
 
@@ -2681,18 +2683,11 @@ bnad_enable_msix(struct bnad *bnad)
 		bnad->msix_num = BNAD_NUM_TXQ + BNAD_NUM_RXP +
 			 BNAD_MAILBOX_MSIX_VECTORS;
 
-		if (bnad->msix_num > ret)
-			goto intx_mode;
-
-		/* Try once more with adjusted numbers */
-		/* If this fails, fall back to INTx */
-		ret = pci_enable_msix(bnad->pcidev, bnad->msix_table,
-				      bnad->msix_num);
-		if (ret)
+		if (bnad->msix_num > ret) {
+			pci_disable_msix(bnad->pcidev);
 			goto intx_mode;
-
-	} else if (ret < 0)
-		goto intx_mode;
+		}
+	}
 
 	pci_intx(bnad->pcidev, 0);
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 05/34] cxgb3: Remove superfluous call to pci_disable_msix()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (4 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Santosh Raspatur, netdev, linux-pci

There is no need to call pci_disable_msix() in case
the previous call to pci_enable_msix() failed

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
index 45d7733..b72d2ed 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
@@ -3097,9 +3097,6 @@ static int cxgb_enable_msix(struct adapter *adap)
 	while ((err = pci_enable_msix(adap->pdev, entries, vectors)) > 0)
 		vectors = err;
 
-	if (err < 0)
-		pci_disable_msix(adap->pdev);
-
 	if (!err && vectors < (adap->params.nports + 1)) {
 		pci_disable_msix(adap->pdev);
 		err = -1;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 06/34] cxgb3: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (5 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Santosh Raspatur, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c |   23 +++++++++--------------
 1 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
index b72d2ed..07bbb71 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
@@ -3088,27 +3088,22 @@ static int cxgb_enable_msix(struct adapter *adap)
 {
 	struct msix_entry entries[SGE_QSETS + 1];
 	int vectors;
-	int i, err;
+	int i;
 
 	vectors = ARRAY_SIZE(entries);
 	for (i = 0; i < vectors; ++i)
 		entries[i].entry = i;
 
-	while ((err = pci_enable_msix(adap->pdev, entries, vectors)) > 0)
-		vectors = err;
-
-	if (!err && vectors < (adap->params.nports + 1)) {
-		pci_disable_msix(adap->pdev);
-		err = -1;
-	}
+	vectors = pci_enable_msix_range(adap->pdev, entries,
+					adap->params.nports + 1, vectors);
+	if (vectors < 0)
+		return vectors;
 
-	if (!err) {
-		for (i = 0; i < vectors; ++i)
-			adap->msix_info[i].vec = entries[i].vector;
-		adap->msix_nvectors = vectors;
-	}
+	for (i = 0; i < vectors; ++i)
+		adap->msix_info[i].vec = entries[i].vector;
+	adap->msix_nvectors = vectors;
 
-	return err;
+	return 0;
 }
 
 static void print_port_info(struct adapter *adap, const struct adapter_info *ai)
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 07/34] cxgb4: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (6 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Dimitris Michailidis, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |   50 +++++++++++------------
 1 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 43ab35f..bd0321d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -5737,7 +5737,7 @@ static void reduce_ethqs(struct adapter *adap, int n)
 static int enable_msix(struct adapter *adap)
 {
 	int ofld_need = 0;
-	int i, err, want, need;
+	int i, want, need;
 	struct sge *s = &adap->sge;
 	unsigned int nchan = adap->params.nports;
 	struct msix_entry entries[MAX_INGQ + 1];
@@ -5753,32 +5753,30 @@ static int enable_msix(struct adapter *adap)
 	}
 	need = adap->params.nports + EXTRA_VECS + ofld_need;
 
-	while ((err = pci_enable_msix(adap->pdev, entries, want)) >= need)
-		want = err;
+	want = pci_enable_msix_range(adap->pdev, entries, need, want);
+	if (want < 0)
+		return want;
 
-	if (!err) {
-		/*
-		 * Distribute available vectors to the various queue groups.
-		 * Every group gets its minimum requirement and NIC gets top
-		 * priority for leftovers.
-		 */
-		i = want - EXTRA_VECS - ofld_need;
-		if (i < s->max_ethqsets) {
-			s->max_ethqsets = i;
-			if (i < s->ethqsets)
-				reduce_ethqs(adap, i);
-		}
-		if (is_offload(adap)) {
-			i = want - EXTRA_VECS - s->max_ethqsets;
-			i -= ofld_need - nchan;
-			s->ofldqsets = (i / nchan) * nchan;  /* round down */
-		}
-		for (i = 0; i < want; ++i)
-			adap->msix_info[i].vec = entries[i].vector;
-	} else if (err > 0)
-		dev_info(adap->pdev_dev,
-			 "only %d MSI-X vectors left, not using MSI-X\n", err);
-	return err;
+	/*
+	 * Distribute available vectors to the various queue groups.
+	 * Every group gets its minimum requirement and NIC gets top
+	 * priority for leftovers.
+	 */
+	i = want - EXTRA_VECS - ofld_need;
+	if (i < s->max_ethqsets) {
+		s->max_ethqsets = i;
+		if (i < s->ethqsets)
+			reduce_ethqs(adap, i);
+	}
+	if (is_offload(adap)) {
+		i = want - EXTRA_VECS - s->max_ethqsets;
+		i -= ofld_need - nchan;
+		s->ofldqsets = (i / nchan) * nchan;  /* round down */
+	}
+	for (i = 0; i < want; ++i)
+		adap->msix_info[i].vec = entries[i].vector;
+
+	return 0;
 }
 
 #undef EXTRA_VECS
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 08/34] cxgb4vf: Remove superfluous call to pci_disable_msix()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (7 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Casey Leedom, netdev, linux-pci

There is no need to call pci_disable_msix() in case
the previous call to pci_enable_msix() failed

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c    |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
index 0899c09..509fed9 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
@@ -2475,7 +2475,6 @@ static int enable_msix(struct adapter *adapter)
 		for (i = 0; i < want; ++i)
 			adapter->msix_info[i].vec = entries[i].vector;
 	} else if (err > 0) {
-		pci_disable_msix(adapter->pdev);
 		dev_info(adapter->pdev_dev, "only %d MSI-X vectors left,"
 			 " not using MSI-X\n", err);
 	}
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 09/34] cxgb4vf: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (8 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Casey Leedom, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c    |   34 +++++++++----------
 1 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
index 509fed9..1d0fe9b 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
@@ -2444,7 +2444,7 @@ static void reduce_ethqs(struct adapter *adapter, int n)
  */
 static int enable_msix(struct adapter *adapter)
 {
-	int i, err, want, need;
+	int i, want, need, nqsets;
 	struct msix_entry entries[MSIX_ENTRIES];
 	struct sge *s = &adapter->sge;
 
@@ -2460,25 +2460,23 @@ static int enable_msix(struct adapter *adapter)
 	 */
 	want = s->max_ethqsets + MSIX_EXTRAS;
 	need = adapter->params.nports + MSIX_EXTRAS;
-	while ((err = pci_enable_msix(adapter->pdev, entries, want)) >= need)
-		want = err;
 
-	if (err == 0) {
-		int nqsets = want - MSIX_EXTRAS;
-		if (nqsets < s->max_ethqsets) {
-			dev_warn(adapter->pdev_dev, "only enough MSI-X vectors"
-				 " for %d Queue Sets\n", nqsets);
-			s->max_ethqsets = nqsets;
-			if (nqsets < s->ethqsets)
-				reduce_ethqs(adapter, nqsets);
-		}
-		for (i = 0; i < want; ++i)
-			adapter->msix_info[i].vec = entries[i].vector;
-	} else if (err > 0) {
-		dev_info(adapter->pdev_dev, "only %d MSI-X vectors left,"
-			 " not using MSI-X\n", err);
+	want = pci_enable_msix_range(adapter->pdev, entries, need, want);
+	if (want < 0)
+		return want;
+
+	nqsets = want - MSIX_EXTRAS;
+	if (nqsets < s->max_ethqsets) {
+		dev_warn(adapter->pdev_dev, "only enough MSI-X vectors"
+			 " for %d Queue Sets\n", nqsets);
+		s->max_ethqsets = nqsets;
+		if (nqsets < s->ethqsets)
+			reduce_ethqs(adapter, nqsets);
 	}
-	return err;
+	for (i = 0; i < want; ++i)
+		adapter->msix_info[i].vec = entries[i].vector;
+
+	return 0;
 }
 
 static const struct net_device_ops cxgb4vf_netdev_ops	= {
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 10/34] enic: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (9 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Christian Benvenuti, Sujith Sankar,
	Govindarajulu Varadarajan, Neel Patel, Nishank Trivedi, netdev,
	linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/cisco/enic/enic_main.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index b740bfc..dcd58f2 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -1796,7 +1796,8 @@ static int enic_set_intr_mode(struct enic *enic)
 	    enic->cq_count >= n + m &&
 	    enic->intr_count >= n + m + 2) {
 
-		if (!pci_enable_msix(enic->pdev, enic->msix_entry, n + m + 2)) {
+		if (pci_enable_msix_range(enic->pdev, enic->msix_entry,
+					  n + m + 2, n + m + 2) > 0) {
 
 			enic->rq_count = n;
 			enic->wq_count = m;
@@ -1815,7 +1816,8 @@ static int enic_set_intr_mode(struct enic *enic)
 	    enic->wq_count >= m &&
 	    enic->cq_count >= 1 + m &&
 	    enic->intr_count >= 1 + m + 2) {
-		if (!pci_enable_msix(enic->pdev, enic->msix_entry, 1 + m + 2)) {
+		if (pci_enable_msix_range(enic->pdev, enic->msix_entry,
+					  1 + m + 2, 1 + m + 2) > 0) {
 
 			enic->rq_count = 1;
 			enic->wq_count = m;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 11/34] benet: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (10 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-02-03  6:21   ` Sathya Perla
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Subbu Seetharaman, Ajit Khaparde, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c |   31 +++++++++++---------------
 1 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 04ac9c6..f55c09b 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2505,7 +2505,7 @@ static void be_msix_disable(struct be_adapter *adapter)
 
 static int be_msix_enable(struct be_adapter *adapter)
 {
-	int i, status, num_vec;
+	int i, num_vec;
 	struct device *dev = &adapter->pdev->dev;
 
 	/* If RoCE is supported, program the max number of NIC vectors that
@@ -2521,24 +2521,11 @@ static int be_msix_enable(struct be_adapter *adapter)
 	for (i = 0; i < num_vec; i++)
 		adapter->msix_entries[i].entry = i;
 
-	status = pci_enable_msix(adapter->pdev, adapter->msix_entries, num_vec);
-	if (status == 0) {
-		goto done;
-	} else if (status >= MIN_MSIX_VECTORS) {
-		num_vec = status;
-		status = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-					 num_vec);
-		if (!status)
-			goto done;
-	}
+	num_vec = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
+					MIN_MSIX_VECTORS, num_vec);
+	if (num_vec < 0)
+		goto fail;
 
-	dev_warn(dev, "MSIx enable failed\n");
-
-	/* INTx is not supported in VFs, so fail probe if enable_msix fails */
-	if (!be_physfn(adapter))
-		return status;
-	return 0;
-done:
 	if (be_roce_supported(adapter) && num_vec > MIN_MSIX_VECTORS) {
 		adapter->num_msix_roce_vec = num_vec / 2;
 		dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
@@ -2550,6 +2537,14 @@ done:
 	dev_info(dev, "enabled %d MSI-x vector(s) for NIC\n",
 		 adapter->num_msix_vec);
 	return 0;
+
+fail:
+	dev_warn(dev, "MSIx enable failed\n");
+
+	/* INTx is not supported in VFs, so fail probe if enable_msix fails */
+	if (!be_physfn(adapter))
+		return num_vec;
+	return 0;
 }
 
 static inline int be_msix_vec_get(struct be_adapter *adapter,
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 12/34] e1000e: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
@ 2014-01-31 15:08   ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, Bruce Allan,
	e1000-devel, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/e1000e/netdev.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 6d91933..7735d1a 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -2041,10 +2041,11 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 				for (i = 0; i < adapter->num_vectors; i++)
 					adapter->msix_entries[i].entry = i;
 
-				err = pci_enable_msix(adapter->pdev,
-						      adapter->msix_entries,
-						      adapter->num_vectors);
-				if (err == 0)
+				err = pci_enable_msix_range(adapter->pdev,
+							adapter->msix_entries,
+							adapter->num_vectors,
+							adapter->num_vectors);
+				if (err > 0)
 					return;
 			}
 			/* MSI-X failed, so fall through and try MSI */
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 12/34] e1000e: Use pci_enable_msix_range()
@ 2014-01-31 15:08   ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: e1000-devel, netdev, Bruce Allan, Jesse Brandeburg,
	Alexander Gordeev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/e1000e/netdev.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 6d91933..7735d1a 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -2041,10 +2041,11 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 				for (i = 0; i < adapter->num_vectors; i++)
 					adapter->msix_entries[i].entry = i;
 
-				err = pci_enable_msix(adapter->pdev,
-						      adapter->msix_entries,
-						      adapter->num_vectors);
-				if (err == 0)
+				err = pci_enable_msix_range(adapter->pdev,
+							adapter->msix_entries,
+							adapter->num_vectors,
+							adapter->num_vectors);
+				if (err > 0)
 					return;
 			}
 			/* MSI-X failed, so fall through and try MSI */
-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 13/34] i40e: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
@ 2014-01-31 15:08   ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, e1000-devel,
	netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c |   33 +++++----------------------
 1 files changed, 6 insertions(+), 27 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index a4b9408..89d7fce 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -5849,37 +5849,16 @@ err_out:
  **/
 static int i40e_reserve_msix_vectors(struct i40e_pf *pf, int vectors)
 {
-	int err = 0;
-
-	pf->num_msix_entries = 0;
-	while (vectors >= I40E_MIN_MSIX) {
-		err = pci_enable_msix(pf->pdev, pf->msix_entries, vectors);
-		if (err == 0) {
-			/* good to go */
-			pf->num_msix_entries = vectors;
-			break;
-		} else if (err < 0) {
-			/* total failure */
-			dev_info(&pf->pdev->dev,
-				 "MSI-X vector reservation failed: %d\n", err);
-			vectors = 0;
-			break;
-		} else {
-			/* err > 0 is the hint for retry */
-			dev_info(&pf->pdev->dev,
-				 "MSI-X vectors wanted %d, retrying with %d\n",
-				 vectors, err);
-			vectors = err;
-		}
-	}
-
-	if (vectors > 0 && vectors < I40E_MIN_MSIX) {
+	vectors = pci_enable_msix_range(pf->pdev, pf->msix_entries,
+					I40E_MIN_MSIX, vectors);
+	if (vectors < 0) {
 		dev_info(&pf->pdev->dev,
-			 "Couldn't get enough vectors, only %d available\n",
-			 vectors);
+			 "MSI-X vector reservation failed: %d\n", vectors);
 		vectors = 0;
 	}
 
+	pf->num_msix_entries = vectors;
+
 	return vectors;
 }
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 13/34] i40e: Use pci_enable_msix_range()
@ 2014-01-31 15:08   ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: e1000-devel, netdev, Jesse Brandeburg, Alexander Gordeev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c |   33 +++++----------------------
 1 files changed, 6 insertions(+), 27 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index a4b9408..89d7fce 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -5849,37 +5849,16 @@ err_out:
  **/
 static int i40e_reserve_msix_vectors(struct i40e_pf *pf, int vectors)
 {
-	int err = 0;
-
-	pf->num_msix_entries = 0;
-	while (vectors >= I40E_MIN_MSIX) {
-		err = pci_enable_msix(pf->pdev, pf->msix_entries, vectors);
-		if (err == 0) {
-			/* good to go */
-			pf->num_msix_entries = vectors;
-			break;
-		} else if (err < 0) {
-			/* total failure */
-			dev_info(&pf->pdev->dev,
-				 "MSI-X vector reservation failed: %d\n", err);
-			vectors = 0;
-			break;
-		} else {
-			/* err > 0 is the hint for retry */
-			dev_info(&pf->pdev->dev,
-				 "MSI-X vectors wanted %d, retrying with %d\n",
-				 vectors, err);
-			vectors = err;
-		}
-	}
-
-	if (vectors > 0 && vectors < I40E_MIN_MSIX) {
+	vectors = pci_enable_msix_range(pf->pdev, pf->msix_entries,
+					I40E_MIN_MSIX, vectors);
+	if (vectors < 0) {
 		dev_info(&pf->pdev->dev,
-			 "Couldn't get enough vectors, only %d available\n",
-			 vectors);
+			 "MSI-X vector reservation failed: %d\n", vectors);
 		vectors = 0;
 	}
 
+	pf->num_msix_entries = vectors;
+
 	return vectors;
 }
 
-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 14/34] igb: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
@ 2014-01-31 15:08   ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, e1000-devel,
	netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 46d31a4..84dfa3f 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1111,10 +1111,11 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)
 	for (i = 0; i < numvecs; i++)
 		adapter->msix_entries[i].entry = i;
 
-	err = pci_enable_msix(adapter->pdev,
-			      adapter->msix_entries,
-			      numvecs);
-	if (err == 0)
+	err = pci_enable_msix_range(adapter->pdev,
+				    adapter->msix_entries,
+				    numvecs,
+				    numvecs);
+	if (err > 0)
 		return;
 
 	igb_reset_interrupt_capability(adapter);
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 14/34] igb: Use pci_enable_msix_range()
@ 2014-01-31 15:08   ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: e1000-devel, netdev, Jesse Brandeburg, Alexander Gordeev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 46d31a4..84dfa3f 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1111,10 +1111,11 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)
 	for (i = 0; i < numvecs; i++)
 		adapter->msix_entries[i].entry = i;
 
-	err = pci_enable_msix(adapter->pdev,
-			      adapter->msix_entries,
-			      numvecs);
-	if (err == 0)
+	err = pci_enable_msix_range(adapter->pdev,
+				    adapter->msix_entries,
+				    numvecs,
+				    numvecs);
+	if (err > 0)
 		return;
 
 	igb_reset_interrupt_capability(adapter);
-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 15/34] igbvf: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
@ 2014-01-31 15:08   ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, Bruce Allan,
	e1000-devel, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/igbvf/netdev.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index 675435f..e2c6d80 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -1043,11 +1043,11 @@ static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)
 		for (i = 0; i < 3; i++)
 			adapter->msix_entries[i].entry = i;
 
-		err = pci_enable_msix(adapter->pdev,
-		                      adapter->msix_entries, 3);
+		err = pci_enable_msix_range(adapter->pdev,
+		                            adapter->msix_entries, 3, 3);
 	}
 
-	if (err) {
+	if (err < 0) {
 		/* MSI-X failed */
 		dev_err(&adapter->pdev->dev,
 		        "Failed to initialize MSI-X interrupts.\n");
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 15/34] igbvf: Use pci_enable_msix_range()
@ 2014-01-31 15:08   ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: e1000-devel, netdev, Bruce Allan, Jesse Brandeburg,
	Alexander Gordeev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/igbvf/netdev.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index 675435f..e2c6d80 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -1043,11 +1043,11 @@ static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)
 		for (i = 0; i < 3; i++)
 			adapter->msix_entries[i].entry = i;
 
-		err = pci_enable_msix(adapter->pdev,
-		                      adapter->msix_entries, 3);
+		err = pci_enable_msix_range(adapter->pdev,
+		                            adapter->msix_entries, 3, 3);
 	}
 
-	if (err) {
+	if (err < 0) {
 		/* MSI-X failed */
 		dev_err(&adapter->pdev->dev,
 		        "Failed to initialize MSI-X interrupts.\n");
-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 16/34] ixgbe: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
@ 2014-01-31 15:08   ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, Bruce Allan,
	e1000-devel, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c |   16 ++++------------
 1 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index 32e3eaa..0834e1e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -698,7 +698,7 @@ static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
 static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
 				       int vectors)
 {
-	int err, vector_threshold;
+	int vector_threshold;
 
 	/* We'll want at least 2 (vector_threshold):
 	 * 1) TxQ[0] + RxQ[0] handler
@@ -712,18 +712,10 @@ static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
 	 * Right now, we simply care about how many we'll get; we'll
 	 * set them up later while requesting irq's.
 	 */
-	while (vectors >= vector_threshold) {
-		err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-				      vectors);
-		if (!err) /* Success in acquiring all requested vectors. */
-			break;
-		else if (err < 0)
-			vectors = 0; /* Nasty failure, quit now */
-		else /* err == number of vectors we should try again with */
-			vectors = err;
-	}
+	vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
+					vector_threshold, vectors);
 
-	if (vectors < vector_threshold) {
+	if (vectors < 0) {
 		/* Can't allocate enough MSI-X interrupts?  Oh well.
 		 * This just means we'll go with either a single MSI
 		 * vector or fall back to legacy interrupts.
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 16/34] ixgbe: Use pci_enable_msix_range()
@ 2014-01-31 15:08   ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: e1000-devel, netdev, Bruce Allan, Jesse Brandeburg,
	Alexander Gordeev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c |   16 ++++------------
 1 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index 32e3eaa..0834e1e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -698,7 +698,7 @@ static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
 static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
 				       int vectors)
 {
-	int err, vector_threshold;
+	int vector_threshold;
 
 	/* We'll want at least 2 (vector_threshold):
 	 * 1) TxQ[0] + RxQ[0] handler
@@ -712,18 +712,10 @@ static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
 	 * Right now, we simply care about how many we'll get; we'll
 	 * set them up later while requesting irq's.
 	 */
-	while (vectors >= vector_threshold) {
-		err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-				      vectors);
-		if (!err) /* Success in acquiring all requested vectors. */
-			break;
-		else if (err < 0)
-			vectors = 0; /* Nasty failure, quit now */
-		else /* err == number of vectors we should try again with */
-			vectors = err;
-	}
+	vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
+					vector_threshold, vectors);
 
-	if (vectors < vector_threshold) {
+	if (vectors < 0) {
 		/* Can't allocate enough MSI-X interrupts?  Oh well.
 		 * This just means we'll go with either a single MSI
 		 * vector or fall back to legacy interrupts.
-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 17/34] ixgbevf: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (16 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 19:20   ` Sergei Shtylyov
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Jeff Kirsher, Jesse Brandeburg, Bruce Allan,
	e1000-devel, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   33 +++++++-------------
 1 files changed, 12 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 9df2898..521a9d7 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -1817,7 +1817,6 @@ void ixgbevf_reset(struct ixgbevf_adapter *adapter)
 static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
 					int vectors)
 {
-	int err = 0;
 	int vector_threshold;
 
 	/* We'll want at least 2 (vector_threshold):
@@ -1831,33 +1830,25 @@ static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
 	 * Right now, we simply care about how many we'll get; we'll
 	 * set them up later while requesting irq's.
 	 */
-	while (vectors >= vector_threshold) {
-		err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-				      vectors);
-		if (!err || err < 0) /* Success or a nasty failure. */
-			break;
-		else /* err == number of vectors we should try again with */
-			vectors = err;
-	}
+	vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
+					vector_threshold, vectors);
 
-	if (vectors < vector_threshold)
-		err = -ENOMEM;
-
-	if (err) {
+	if (vectors < 0) {
 		dev_err(&adapter->pdev->dev,
 			"Unable to allocate MSI-X interrupts\n");
 		kfree(adapter->msix_entries);
 		adapter->msix_entries = NULL;
-	} else {
-		/*
-		 * Adjust for only the vectors we'll use, which is minimum
-		 * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
-		 * vectors we were allocated.
-		 */
-		adapter->num_msix_vectors = vectors;
+		return vectors;
 	}
 
-	return err;
+	/*
+	 * Adjust for only the vectors we'll use, which is minimum
+	 * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
+	 * vectors we were allocated.
+	 */
+	adapter->num_msix_vectors = vectors;
+
+	return 0;
 }
 
 /**
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 18/34] mlx4: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (17 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 19:22   ` Sergei Shtylyov
  2014-02-02  9:43   ` Amir Vadai
  -1 siblings, 2 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, David S. Miller, Amir Vadai, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/mellanox/mlx4/main.c |   19 ++++---------------
 1 files changed, 4 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index d711158..a9d1249 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -1976,7 +1976,6 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
 	int nreq = min_t(int, dev->caps.num_ports *
 			 min_t(int, netif_get_num_default_rss_queues() + 1,
 			       MAX_MSIX_P_PORT) + MSIX_LEGACY_SZ, MAX_MSIX);
-	int err;
 	int i;
 
 	if (msi_x) {
@@ -1990,22 +1989,12 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
 		for (i = 0; i < nreq; ++i)
 			entries[i].entry = i;
 
-	retry:
-		err = pci_enable_msix(dev->pdev, entries, nreq);
-		if (err) {
-			/* Try again if at least 2 vectors are available */
-			if (err > 1) {
-				mlx4_info(dev, "Requested %d vectors, "
-					  "but only %d MSI-X vectors available, "
-					  "trying again\n", nreq, err);
-				nreq = err;
-				goto retry;
-			}
+		nreq = pci_enable_msix_range(dev->pdev, entries, 2, nreq);
+
+		if (nreq < 0) {
 			kfree(entries);
 			goto no_msi;
-		}
-
-		if (nreq <
+		} else if (nreq <
 		    MSIX_LEGACY_SZ + dev->caps.num_ports * MIN_MSIX_P_PORT) {
 			/*Working in legacy mode , all EQ's shared*/
 			dev->caps.comp_pool           = 0;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 19/34] mlx5: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (18 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Eli Cohen, linux-rdma, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/main.c |   16 +++++-----------
 1 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index a064f06..81df046 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -116,7 +116,6 @@ static int mlx5_enable_msix(struct mlx5_core_dev *dev)
 	struct mlx5_eq_table *table = &dev->priv.eq_table;
 	int num_eqs = 1 << dev->caps.log_max_eq;
 	int nvec;
-	int err;
 	int i;
 
 	nvec = dev->caps.num_ports * num_online_cpus() + MLX5_EQ_VEC_COMP_BASE;
@@ -131,17 +130,12 @@ static int mlx5_enable_msix(struct mlx5_core_dev *dev)
 	for (i = 0; i < nvec; i++)
 		table->msix_arr[i].entry = i;
 
-retry:
-	table->num_comp_vectors = nvec - MLX5_EQ_VEC_COMP_BASE;
-	err = pci_enable_msix(dev->pdev, table->msix_arr, nvec);
-	if (err <= 0) {
-		return err;
-	} else if (err > 2) {
-		nvec = err;
-		goto retry;
-	}
+	nvec = pci_enable_msix_range(dev->pdev, table->msix_arr,
+				     MLX5_EQ_VEC_COMP_BASE, nvec);
+	if (nvec < 0)
+		return nvec;
 
-	mlx5_core_dbg(dev, "received %d MSI vectors out of %d requested\n", err, nvec);
+	table->num_comp_vectors = nvec - MLX5_EQ_VEC_COMP_BASE;
 
 	return 0;
 }
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 20/34] myri10ge: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (19 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 19:24   ` Sergei Shtylyov
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Hyong-Youb Kim, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c |   32 ++++++++++-----------
 1 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index 68026f7..9f717d6 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -2329,16 +2329,14 @@ static int myri10ge_request_irq(struct myri10ge_priv *mgp)
 	status = 0;
 	if (myri10ge_msi) {
 		if (mgp->num_slices > 1) {
-			status =
-			    pci_enable_msix(pdev, mgp->msix_vectors,
-					    mgp->num_slices);
-			if (status == 0) {
-				mgp->msix_enabled = 1;
-			} else {
+			status = pci_enable_msix_range(pdev, mgp->msix_vectors,
+					mgp->num_slices, mgp->num_slices);
+			if (status < 0) {
 				dev_err(&pdev->dev,
 					"Error %d setting up MSI-X\n", status);
 				return status;
 			}
+			mgp->msix_enabled = 1;
 		}
 		if (mgp->msix_enabled == 0) {
 			status = pci_enable_msi(pdev);
@@ -3901,23 +3899,23 @@ static void myri10ge_probe_slices(struct myri10ge_priv *mgp)
 	}
 
 	while (mgp->num_slices > 1) {
-		/* make sure it is a power of two */
-		while (!is_power_of_2(mgp->num_slices))
-			mgp->num_slices--;
+		mgp->num_slices = rounddown_pow_of_two(mgp->num_slices);
 		if (mgp->num_slices == 1)
 			goto disable_msix;
-		status = pci_enable_msix(pdev, mgp->msix_vectors,
-					 mgp->num_slices);
-		if (status == 0) {
-			pci_disable_msix(pdev);
+		status = pci_enable_msix_range(pdev, mgp->msix_vectors,
+					mgp->num_slices, mgp->num_slices);
+		if (status < 0)
+			goto disable_msix;
+
+		pci_disable_msix(pdev);
+
+		if (status == mgp->num_slices) {
 			if (old_allocated)
 				kfree(old_fw);
 			return;
-		}
-		if (status > 0)
+		} else {
 			mgp->num_slices = status;
-		else
-			goto disable_msix;
+		}
 	}
 
 disable_msix:
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 21/34] s2io: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (20 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Jon Mason, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/neterion/s2io.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
index 9eeddbd..56e3a9d 100644
--- a/drivers/net/ethernet/neterion/s2io.c
+++ b/drivers/net/ethernet/neterion/s2io.c
@@ -3792,9 +3792,10 @@ static int s2io_enable_msi_x(struct s2io_nic *nic)
 	writeq(rx_mat, &bar0->rx_mat);
 	readq(&bar0->rx_mat);
 
-	ret = pci_enable_msix(nic->pdev, nic->entries, nic->num_entries);
+	ret = pci_enable_msix_range(nic->pdev, nic->entries,
+				    nic->num_entries, nic->num_entries);
 	/* We fail init if error or we get less vectors than min required */
-	if (ret) {
+	if (ret < 0) {
 		DBG_PRINT(ERR_DBG, "Enabling MSI-X failed\n");
 		kfree(nic->entries);
 		swstats->mem_freed += nic->num_entries *
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 22/34] vxge: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (21 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexander Gordeev, Jon Mason, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/neterion/vxge/vxge-main.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
index 1ded50ca..d6682ed 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
+++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
@@ -2352,12 +2352,18 @@ start:
 	vdev->vxge_entries[j].entry = VXGE_ALARM_MSIX_ID;
 	vdev->vxge_entries[j].in_use = 0;
 
-	ret = pci_enable_msix(vdev->pdev, vdev->entries, vdev->intr_cnt);
-	if (ret > 0) {
+	ret = pci_enable_msix_range(vdev->pdev,
+				    vdev->entries, 3, vdev->intr_cnt);
+	if (ret < 0) {
+		ret = -ENODEV;
+		goto enable_msix_failed;
+	} else if (ret < vdev->intr_cnt) {
+		pci_disable_msix(vdev->pdev);
+
 		vxge_debug_init(VXGE_ERR,
 			"%s: MSI-X enable failed for %d vectors, ret: %d",
 			VXGE_DRIVER_NAME, vdev->intr_cnt, ret);
-		if ((max_config_vpath != VXGE_USE_DEFAULT) || (ret < 3)) {
+		if (max_config_vpath != VXGE_USE_DEFAULT) {
 			ret = -ENODEV;
 			goto enable_msix_failed;
 		}
@@ -2371,9 +2377,6 @@ start:
 		vxge_close_vpaths(vdev, temp);
 		vdev->no_of_vpath = temp;
 		goto start;
-	} else if (ret < 0) {
-		ret = -ENODEV;
-		goto enable_msix_failed;
 	}
 	return 0;
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 23/34] forcedeth: Fix invalid errno reporting in nv_request_irq()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (22 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, David S. Miller, Patrick McHardy, netdev, linux-pci

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 70cf97f..f4270b8 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3952,8 +3952,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 			if (optimization_mode == NV_OPTIMIZATION_MODE_THROUGHPUT && !intr_test) {
 				/* Request irq for rx handling */
 				sprintf(np->name_rx, "%s-rx", dev->name);
-				if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector,
-						nv_nic_irq_rx, IRQF_SHARED, np->name_rx, dev) != 0) {
+				ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector,
+						  nv_nic_irq_rx, IRQF_SHARED, np->name_rx, dev);
+				if (ret) {
 					netdev_info(dev,
 						    "request_irq failed for rx %d\n",
 						    ret);
@@ -3963,8 +3964,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 				}
 				/* Request irq for tx handling */
 				sprintf(np->name_tx, "%s-tx", dev->name);
-				if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector,
-						nv_nic_irq_tx, IRQF_SHARED, np->name_tx, dev) != 0) {
+				ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector,
+						  nv_nic_irq_tx, IRQF_SHARED, np->name_tx, dev);
+				if (ret) {
 					netdev_info(dev,
 						    "request_irq failed for tx %d\n",
 						    ret);
@@ -3974,8 +3976,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 				}
 				/* Request irq for link and timer handling */
 				sprintf(np->name_other, "%s-other", dev->name);
-				if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector,
-						nv_nic_irq_other, IRQF_SHARED, np->name_other, dev) != 0) {
+				ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector,
+						  nv_nic_irq_other, IRQF_SHARED, np->name_other, dev);
+				if (ret) {
 					netdev_info(dev,
 						    "request_irq failed for link %d\n",
 						    ret);
@@ -3991,7 +3994,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 				set_msix_vector_map(dev, NV_MSI_X_VECTOR_OTHER, NVREG_IRQ_OTHER);
 			} else {
 				/* Request irq for all interrupts */
-				if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector, handler, IRQF_SHARED, dev->name, dev) != 0) {
+				ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector,
+						  handler, IRQF_SHARED, dev->name, dev);
+				if (ret) {
 					netdev_info(dev,
 						    "request_irq failed %d\n",
 						    ret);
@@ -4011,7 +4016,8 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 		ret = pci_enable_msi(np->pci_dev);
 		if (ret == 0) {
 			np->msi_flags |= NV_MSI_ENABLED;
-			if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) {
+			ret = request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev);
+			if (ret) {
 				netdev_info(dev, "request_irq failed %d\n",
 					    ret);
 				pci_disable_msi(np->pci_dev);
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 24/34] forcedeth: Cleanup MSI-X to MSI to INTx fallback code
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (23 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, David S. Miller, Patrick McHardy, netdev, linux-pci

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index f4270b8..74da489 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3930,7 +3930,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 {
 	struct fe_priv *np = get_nvpriv(dev);
 	u8 __iomem *base = get_hwbase(dev);
-	int ret = 1;
+	int ret;
 	int i;
 	irqreturn_t (*handler)(int foo, void *data);
 
@@ -4010,9 +4010,10 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 				writel(0, base + NvRegMSIXMap1);
 			}
 			netdev_info(dev, "MSI-X enabled\n");
+			return 0;
 		}
 	}
-	if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) {
+	if (np->msi_flags & NV_MSI_CAPABLE) {
 		ret = pci_enable_msi(np->pci_dev);
 		if (ret == 0) {
 			np->msi_flags |= NV_MSI_ENABLED;
@@ -4031,13 +4032,12 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 			/* enable msi vector 0 */
 			writel(NVREG_MSI_VECTOR_0_ENABLED, base + NvRegMSIIrqMask);
 			netdev_info(dev, "MSI enabled\n");
+			return 0;
 		}
 	}
-	if (ret != 0) {
-		if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0)
-			goto out_err;
 
-	}
+	if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0)
+		goto out_err;
 
 	return 0;
 out_free_tx:
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 25/34] forcedeth: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (24 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, David S. Miller, Patrick McHardy, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 74da489..bad3c05 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3946,8 +3946,11 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 	if (np->msi_flags & NV_MSI_X_CAPABLE) {
 		for (i = 0; i < (np->msi_flags & NV_MSI_X_VECTORS_MASK); i++)
 			np->msi_x_entry[i].entry = i;
-		ret = pci_enable_msix(np->pci_dev, np->msi_x_entry, (np->msi_flags & NV_MSI_X_VECTORS_MASK));
-		if (ret == 0) {
+		ret = pci_enable_msix_range(np->pci_dev,
+					    np->msi_x_entry,
+					    np->msi_flags & NV_MSI_X_VECTORS_MASK,
+					    np->msi_flags & NV_MSI_X_VECTORS_MASK);
+		if (ret > 0) {
 			np->msi_flags |= NV_MSI_X_ENABLED;
 			if (optimization_mode == NV_OPTIMIZATION_MODE_THROUGHPUT && !intr_test) {
 				/* Request irq for rx handling */
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 26/34] netxen: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (25 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Manish Chopra, Sony Chacko, Rajesh Borundia,
	netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 .../net/ethernet/qlogic/netxen/netxen_nic_main.c   |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index 70849de..f09c35d 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -643,8 +643,9 @@ static int netxen_setup_msi_interrupts(struct netxen_adapter *adapter,
 
 	if (adapter->msix_supported) {
 		netxen_init_msix_entries(adapter, num_msix);
-		err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
-		if (err == 0) {
+		err = pci_enable_msix_range(pdev, adapter->msix_entries,
+					    num_msix, num_msix);
+		if (err > 0) {
 			adapter->flags |= NETXEN_NIC_MSIX_ENABLED;
 			netxen_set_msix_bit(pdev, 1);
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 27/34] qlcnic: Cleanup qlcnic_enable_msix() return values
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (26 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Himanshu Madhani, Rajesh Borundia,
	Shahed Shaikh, netdev, linux-pci

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 1f79d47..3d2eb14 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -684,7 +684,7 @@ restore:
 int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix)
 {
 	struct pci_dev *pdev = adapter->pdev;
-	int err = -1, vector;
+	int err, vector;
 
 	if (!adapter->msix_entries) {
 		adapter->msix_entries = kcalloc(num_msix,
@@ -706,7 +706,7 @@ enable_msix:
 			adapter->flags |= QLCNIC_MSIX_ENABLED;
 			adapter->ahw->num_msix = num_msix;
 			dev_info(&pdev->dev, "using msi-x interrupts\n");
-			return err;
+			return 0;
 		} else if (err > 0) {
 			dev_info(&pdev->dev,
 				 "Unable to allocate %d MSI-X vectors, Available vectors %d\n",
@@ -715,12 +715,12 @@ enable_msix:
 			if (qlcnic_82xx_check(adapter)) {
 				num_msix = rounddown_pow_of_two(err);
 				if (err < QLCNIC_82XX_MINIMUM_VECTOR)
-					return -EIO;
+					return -ENOSPC;
 			} else {
 				num_msix = rounddown_pow_of_two(err - 1);
 				num_msix += 1;
 				if (err < QLCNIC_83XX_MINIMUM_VECTOR)
-					return -EIO;
+					return -ENOSPC;
 			}
 
 			if (qlcnic_82xx_check(adapter) &&
@@ -747,7 +747,7 @@ enable_msix:
 		}
 	}
 
-	return err;
+	return -EIO;
 }
 
 static int qlcnic_82xx_calculate_msix_vector(struct qlcnic_adapter *adapter)
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 28/34] qlcnic: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (27 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Himanshu Madhani, Rajesh Borundia,
	Shahed Shaikh, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 3d2eb14..ea7a17c 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -701,13 +701,17 @@ enable_msix:
 		for (vector = 0; vector < num_msix; vector++)
 			adapter->msix_entries[vector].entry = vector;
 
-		err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
-		if (err == 0) {
+		err = pci_enable_msix_range(pdev,
+					    adapter->msix_entries, 1, num_msix);
+
+		if (err == num_msix) {
 			adapter->flags |= QLCNIC_MSIX_ENABLED;
 			adapter->ahw->num_msix = num_msix;
 			dev_info(&pdev->dev, "using msi-x interrupts\n");
 			return 0;
 		} else if (err > 0) {
+			pci_disable_msix(pdev);
+
 			dev_info(&pdev->dev,
 				 "Unable to allocate %d MSI-X vectors, Available vectors %d\n",
 				 num_msix, err);
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 29/34] qlge: Get rid of an redundant assignment
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (28 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Shahed Shaikh, Jitendra Kalsaria, Ron Mercer,
	linux-driver, netdev, linux-pci

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/qlogic/qlge/qlge_main.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index ce2cfdd..82bace5 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -3346,7 +3346,6 @@ static void ql_enable_msix(struct ql_adapter *qdev)
 			qdev->msi_x_entry = NULL;
 			netif_warn(qdev, ifup, qdev->ndev,
 				   "MSI-X Enable failed, trying MSI.\n");
-			qdev->intr_count = 1;
 			qlge_irq_type = MSI_IRQ;
 		} else if (err == 0) {
 			set_bit(QL_MSIX_ENABLED, &qdev->flags);
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 30/34] qlge: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (29 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Shahed Shaikh, Jitendra Kalsaria, Ron Mercer,
	linux-driver, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/qlogic/qlge/qlge_main.c |   15 ++++-----------
 1 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index 82bace5..adf87d2 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -3331,23 +3331,16 @@ static void ql_enable_msix(struct ql_adapter *qdev)
 		for (i = 0; i < qdev->intr_count; i++)
 			qdev->msi_x_entry[i].entry = i;
 
-		/* Loop to get our vectors.  We start with
-		 * what we want and settle for what we get.
-		 */
-		do {
-			err = pci_enable_msix(qdev->pdev,
-				qdev->msi_x_entry, qdev->intr_count);
-			if (err > 0)
-				qdev->intr_count = err;
-		} while (err > 0);
-
+		err = pci_enable_msix_range(qdev->pdev, qdev->msi_x_entry,
+					    1, qdev->intr_count);
 		if (err < 0) {
 			kfree(qdev->msi_x_entry);
 			qdev->msi_x_entry = NULL;
 			netif_warn(qdev, ifup, qdev->ndev,
 				   "MSI-X Enable failed, trying MSI.\n");
 			qlge_irq_type = MSI_IRQ;
-		} else if (err == 0) {
+		} else {
+			qdev->intr_count = err;
 			set_bit(QL_MSIX_ENABLED, &qdev->flags);
 			netif_info(qdev, ifup, qdev->ndev,
 				   "MSI-X Enabled, got %d vectors.\n",
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 31/34] efx: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (30 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  2014-01-31 17:21   ` Shradha Shah
  -1 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Shradha Shah, Solarflare maintainers, netdev,
	linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/sfc/efx.c |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 83d4643..297b97a 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -1346,20 +1346,23 @@ static int efx_probe_interrupts(struct efx_nic *efx)
 
 		for (i = 0; i < n_channels; i++)
 			xentries[i].entry = i;
-		rc = pci_enable_msix(efx->pci_dev, xentries, n_channels);
-		if (rc > 0) {
+		rc = pci_enable_msix_range(efx->pci_dev,
+					   xentries, 1, n_channels);
+		if (rc < 0) {
+			/* Fall back to single channel MSI */
+			efx->interrupt_mode = EFX_INT_MODE_MSI;
+			netif_err(efx, drv, efx->net_dev,
+				  "could not enable MSI-X\n");
+		} else if (rc < n_channels) {
 			netif_err(efx, drv, efx->net_dev,
 				  "WARNING: Insufficient MSI-X vectors"
 				  " available (%d < %u).\n", rc, n_channels);
 			netif_err(efx, drv, efx->net_dev,
 				  "WARNING: Performance may be reduced.\n");
-			EFX_BUG_ON_PARANOID(rc >= n_channels);
 			n_channels = rc;
-			rc = pci_enable_msix(efx->pci_dev, xentries,
-					     n_channels);
 		}
 
-		if (rc == 0) {
+		if (rc > 0) {
 			efx->n_channels = n_channels;
 			if (n_channels > extra_channels)
 				n_channels -= extra_channels;
@@ -1375,11 +1378,6 @@ static int efx_probe_interrupts(struct efx_nic *efx)
 			for (i = 0; i < efx->n_channels; i++)
 				efx_get_channel(efx, i)->irq =
 					xentries[i].vector;
-		} else {
-			/* Fall back to single channel MSI */
-			efx->interrupt_mode = EFX_INT_MODE_MSI;
-			netif_err(efx, drv, efx->net_dev,
-				  "could not enable MSI-X\n");
 		}
 	}
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 32/34] niu: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (31 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, David S. Miller, Jingoo Han, netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/ethernet/sun/niu.c |   11 +++--------
 1 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index 8e2266e..79606f4 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -9041,7 +9041,7 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map)
 	struct msix_entry msi_vec[NIU_NUM_LDG];
 	struct niu_parent *parent = np->parent;
 	struct pci_dev *pdev = np->pdev;
-	int i, num_irqs, err;
+	int i, num_irqs;
 	u8 first_ldg;
 
 	first_ldg = (NIU_NUM_LDG / parent->num_ports) * np->port;
@@ -9053,21 +9053,16 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map)
 		    (np->port == 0 ? 3 : 1));
 	BUG_ON(num_irqs > (NIU_NUM_LDG / parent->num_ports));
 
-retry:
 	for (i = 0; i < num_irqs; i++) {
 		msi_vec[i].vector = 0;
 		msi_vec[i].entry = i;
 	}
 
-	err = pci_enable_msix(pdev, msi_vec, num_irqs);
-	if (err < 0) {
+	num_irqs = pci_enable_msix_range(pdev, msi_vec, 1, num_irqs);
+	if (num_irqs < 0) {
 		np->flags &= ~NIU_FLAGS_MSIX;
 		return;
 	}
-	if (err > 0) {
-		num_irqs = err;
-		goto retry;
-	}
 
 	np->flags |= NIU_FLAGS_MSIX;
 	for (i = 0; i < num_irqs; i++)
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 33/34] vmxnet3: Fix MSI-X/MSI enablement code
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (32 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Shreyas Bhatewara, VMware, Inc., netdev, linux-pci

This update cleans up the MSI-X/MSI enablement code, fixes
vmxnet3_acquire_msix_vectors() invalid return values and
enables a dead code in case VMXNET3_LINUX_MIN_MSIX_VECT
MSI-X vectors were allocated.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/vmxnet3/vmxnet3_drv.c |  101 +++++++++++++++++--------------------
 1 files changed, 46 insertions(+), 55 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 3be786f..3a17797 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2729,47 +2729,44 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
 /*
  * Enable MSIx vectors.
  * Returns :
- *	0 on successful enabling of required vectors,
  *	VMXNET3_LINUX_MIN_MSIX_VECT when only minimum number of vectors required
- *	 could be enabled.
- *	number of vectors which can be enabled otherwise (this number is smaller
+ *	 were enabled.
+ *	number of vectors which were enabled otherwise (this number is greater
  *	 than VMXNET3_LINUX_MIN_MSIX_VECT)
  */
 
 static int
-vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
-			     int vectors)
+vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec)
 {
-	int err = 0, vector_threshold;
-	vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
-
-	while (vectors >= vector_threshold) {
-		err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
-				      vectors);
+	do {
+		int err = pci_enable_msix(adapter->pdev,
+					  adapter->intr.msix_entries, nvec);
 		if (!err) {
-			adapter->intr.num_intrs = vectors;
-			return 0;
+			return nvec;
 		} else if (err < 0) {
 			dev_err(&adapter->netdev->dev,
-				   "Failed to enable MSI-X, error: %d\n", err);
-			vectors = 0;
-		} else if (err < vector_threshold) {
-			break;
+				"Failed to enable MSI-X, error: %d\n", err);
+			return err;
+		} else if (err < VMXNET3_LINUX_MIN_MSIX_VECT) {
+			dev_info(&adapter->pdev->dev,
+				 "Number of MSI-X which can be allocated "
+				 "is lower than min threshold required.\n");
+			return -ENOSPC;
 		} else {
 			/* If fails to enable required number of MSI-x vectors
 			 * try enabling minimum number of vectors required.
 			 */
 			dev_err(&adapter->netdev->dev,
-				"Failed to enable %d MSI-X, trying %d instead\n",
-				    vectors, vector_threshold);
-			vectors = vector_threshold;
+				"Failed to enable %d MSI-X, trying %d\n",
+				nvec, VMXNET3_LINUX_MIN_MSIX_VECT);
+			nvec = VMXNET3_LINUX_MIN_MSIX_VECT;
 		}
-	}
+	} while (nvec >= VMXNET3_LINUX_MIN_MSIX_VECT);
 
-	dev_info(&adapter->pdev->dev,
-		 "Number of MSI-X interrupts which can be allocated "
-		 "is lower than min threshold required.\n");
-	return err;
+	/*
+	 * Should never get here
+	 */
+	return -ENOSPC;
 }
 
 
@@ -2796,56 +2793,50 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
 
 #ifdef CONFIG_PCI_MSI
 	if (adapter->intr.type == VMXNET3_IT_MSIX) {
-		int vector, err = 0;
-
-		adapter->intr.num_intrs = (adapter->share_intr ==
-					   VMXNET3_INTR_TXSHARE) ? 1 :
-					   adapter->num_tx_queues;
-		adapter->intr.num_intrs += (adapter->share_intr ==
-					   VMXNET3_INTR_BUDDYSHARE) ? 0 :
-					   adapter->num_rx_queues;
-		adapter->intr.num_intrs += 1;		/* for link event */
-
-		adapter->intr.num_intrs = (adapter->intr.num_intrs >
-					   VMXNET3_LINUX_MIN_MSIX_VECT
-					   ? adapter->intr.num_intrs :
-					   VMXNET3_LINUX_MIN_MSIX_VECT);
-
-		for (vector = 0; vector < adapter->intr.num_intrs; vector++)
-			adapter->intr.msix_entries[vector].entry = vector;
-
-		err = vmxnet3_acquire_msix_vectors(adapter,
-						   adapter->intr.num_intrs);
+		int i, nvec;
+
+		nvec  = adapter->share_intr == VMXNET3_INTR_TXSHARE ?
+			1 : adapter->num_tx_queues;
+		nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ?
+			0 : adapter->num_rx_queues;
+		nvec += 1;	/* for link event */
+		nvec = nvec > VMXNET3_LINUX_MIN_MSIX_VECT ?
+		       nvec : VMXNET3_LINUX_MIN_MSIX_VECT;
+
+		for (i = 0; i < nvec; i++)
+			adapter->intr.msix_entries[i].entry = i;
+
+		nvec = vmxnet3_acquire_msix_vectors(adapter, nvec);
+		if (nvec < 0)
+			goto msix_err;
+
 		/* If we cannot allocate one MSIx vector per queue
 		 * then limit the number of rx queues to 1
 		 */
-		if (err == VMXNET3_LINUX_MIN_MSIX_VECT) {
+		if (nvec == VMXNET3_LINUX_MIN_MSIX_VECT) {
 			if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE
 			    || adapter->num_rx_queues != 1) {
 				adapter->share_intr = VMXNET3_INTR_TXSHARE;
 				netdev_err(adapter->netdev,
 					   "Number of rx queues : 1\n");
 				adapter->num_rx_queues = 1;
-				adapter->intr.num_intrs =
-						VMXNET3_LINUX_MIN_MSIX_VECT;
 			}
-			return;
 		}
-		if (!err)
-			return;
 
+		adapter->intr.num_intrs = nvec;
+		return;
+
+msix_err:
 		/* If we cannot allocate MSIx vectors use only one rx queue */
 		dev_info(&adapter->pdev->dev,
 			 "Failed to enable MSI-X, error %d. "
-			 "Limiting #rx queues to 1, try MSI.\n", err);
+			 "Limiting #rx queues to 1, try MSI.\n", nvec);
 
 		adapter->intr.type = VMXNET3_IT_MSI;
 	}
 
 	if (adapter->intr.type == VMXNET3_IT_MSI) {
-		int err;
-		err = pci_enable_msi(adapter->pdev);
-		if (!err) {
+		if (!pci_enable_msi(adapter->pdev)) {
 			adapter->num_rx_queues = 1;
 			adapter->intr.num_intrs = 1;
 			return;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 34/34] vmxnet3: Use pci_enable_msix_range()
  2014-01-31 15:46 ` Alexander Gordeev
                   ` (33 preceding siblings ...)
  (?)
@ 2014-01-31 15:08 ` Alexander Gordeev
  -1 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Gordeev, Shreyas Bhatewara, VMware, Inc., netdev, linux-pci

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.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/net/vmxnet3/vmxnet3_drv.c |   47 +++++++++++++++----------------------
 1 files changed, 19 insertions(+), 28 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 3a17797..9275c8c 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2738,35 +2738,26 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
 static int
 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec)
 {
-	do {
-		int err = pci_enable_msix(adapter->pdev,
-					  adapter->intr.msix_entries, nvec);
-		if (!err) {
-			return nvec;
-		} else if (err < 0) {
-			dev_err(&adapter->netdev->dev,
-				"Failed to enable MSI-X, error: %d\n", err);
-			return err;
-		} else if (err < VMXNET3_LINUX_MIN_MSIX_VECT) {
-			dev_info(&adapter->pdev->dev,
-				 "Number of MSI-X which can be allocated "
-				 "is lower than min threshold required.\n");
-			return -ENOSPC;
-		} else {
-			/* If fails to enable required number of MSI-x vectors
-			 * try enabling minimum number of vectors required.
-			 */
-			dev_err(&adapter->netdev->dev,
-				"Failed to enable %d MSI-X, trying %d\n",
-				nvec, VMXNET3_LINUX_MIN_MSIX_VECT);
-			nvec = VMXNET3_LINUX_MIN_MSIX_VECT;
-		}
-	} while (nvec >= VMXNET3_LINUX_MIN_MSIX_VECT);
+	int ret = pci_enable_msix_range(adapter->pdev,
+					adapter->intr.msix_entries, nvec, nvec);
 
-	/*
-	 * Should never get here
-	 */
-	return -ENOSPC;
+	if (ret == -ENOSPC && nvec > VMXNET3_LINUX_MIN_MSIX_VECT) {
+		dev_err(&adapter->netdev->dev,
+			"Failed to enable %d MSI-X, trying %d\n",
+			nvec, VMXNET3_LINUX_MIN_MSIX_VECT);
+
+		ret = pci_enable_msix_range(adapter->pdev,
+					    adapter->intr.msix_entries,
+					    VMXNET3_LINUX_MIN_MSIX_VECT,
+					    VMXNET3_LINUX_MIN_MSIX_VECT);
+	}
+
+	if (ret < 0) {
+		dev_err(&adapter->netdev->dev,
+			"Failed to enable MSI-X, error: %d\n", ret);
+	}
+
+	return ret;
 }
 
 
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [PATCH 00/34] net: Use pci_enable_msix_range()
@ 2014-01-31 15:46 ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: VMware, Inc.,
	linux-pci, Dimitris Michailidis, Shreyas Bhatewara, Rasesh Mody,
	Eli Cohen, Sujith Sankar, e1000-devel, Jingoo Han, Amir Vadai,
	Jesse Brandeburg, Manish Chopra, Alexander Gordeev,
	Govindarajulu Varadarajan, Santosh Raspatur, Casey Leedom,
	Shahed Shaikh, Sony Chacko, Ajit Khaparde, Shradha Shah,
	Ron Mercer, Michael Chan, Subbu Seetharaman

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 (34):
  bnx2: Use pci_enable_msix_range()
  bnx2x: Use pci_enable_msix_range()
  tg3: Use pci_enable_msix_range()
  bna: Use pci_enable_msix_range()
  cxgb3: Remove superfluous call to pci_disable_msix()
  cxgb3: Use pci_enable_msix_range()
  cxgb4: Use pci_enable_msix_range()
  cxgb4vf: Remove superfluous call to pci_disable_msix()
  cxgb4vf: Use pci_enable_msix_range()
  enic: Use pci_enable_msix_range()
  benet: Use pci_enable_msix_range()
  e1000e: Use pci_enable_msix_range()
  i40e: Use pci_enable_msix_range()
  igb: Use pci_enable_msix_range()
  igbvf: Use pci_enable_msix_range()
  ixgbe: Use pci_enable_msix_range()
  ixgbevf: Use pci_enable_msix_range()
  mlx4: Use pci_enable_msix_range()
  mlx5: Use pci_enable_msix_range()
  myri10ge: Use pci_enable_msix_range()
  s2io: Use pci_enable_msix_range()
  vxge: Use pci_enable_msix_range()
  forcedeth: Fix invalid errno reporting in nv_request_irq()
  forcedeth: Cleanup MSI-X to MSI to INTx fallback code
  forcedeth: Use pci_enable_msix_range()
  netxen: Use pci_enable_msix_range()
  qlcnic: Cleanup qlcnic_enable_msix() return values
  qlcnic: Use pci_enable_msix_range()
  qlge: Get rid of an redundant assignment
  qlge: Use pci_enable_msix_range()
  efx: Use pci_enable_msix_range()
  niu: Use pci_enable_msix_range()
  vmxnet3: Fix MSI-X/MSI enablement code
  vmxnet3: Use pci_enable_msix_range()

 drivers/net/ethernet/broadcom/bnx2.c               |   15 +--
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c    |   48 ++++-----
 drivers/net/ethernet/broadcom/tg3.c                |    6 +-
 drivers/net/ethernet/brocade/bna/bnad.c            |   23 ++---
 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c    |   26 ++---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c    |   50 +++++-----
 .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c    |   35 +++----
 drivers/net/ethernet/cisco/enic/enic_main.c        |    6 +-
 drivers/net/ethernet/emulex/benet/be_main.c        |   31 +++---
 drivers/net/ethernet/intel/e1000e/netdev.c         |    9 +-
 drivers/net/ethernet/intel/i40e/i40e_main.c        |   33 +-----
 drivers/net/ethernet/intel/igb/igb_main.c          |    9 +-
 drivers/net/ethernet/intel/igbvf/netdev.c          |    6 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c       |   16 +--
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c  |   33 ++----
 drivers/net/ethernet/mellanox/mlx4/main.c          |   19 +---
 drivers/net/ethernet/mellanox/mlx5/core/main.c     |   16 +--
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c   |   32 +++---
 drivers/net/ethernet/neterion/s2io.c               |    5 +-
 drivers/net/ethernet/neterion/vxge/vxge-main.c     |   15 ++-
 drivers/net/ethernet/nvidia/forcedeth.c            |   41 +++++---
 .../net/ethernet/qlogic/netxen/netxen_nic_main.c   |    5 +-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   18 ++--
 drivers/net/ethernet/qlogic/qlge/qlge_main.c       |   16 +--
 drivers/net/ethernet/sfc/efx.c                     |   20 ++--
 drivers/net/ethernet/sun/niu.c                     |   11 +--
 drivers/net/vmxnet3/vmxnet3_drv.c                  |  110 ++++++++-----------
 27 files changed, 274 insertions(+), 380 deletions(-)

-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH 00/34] net: Use pci_enable_msix_range()
@ 2014-01-31 15:46 ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-01-31 15:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: VMware, Inc.,
	linux-pci, Dimitris Michailidis, Shreyas Bhatewara, Rasesh Mody,
	Eli Cohen, Sujith Sankar, e1000-devel, Jingoo Han, Amir Vadai,
	Jesse Brandeburg, Manish Chopra, Alexander Gordeev,
	Govindarajulu Varadarajan, Santosh Raspatur, Casey Leedom,
	Shahed Shaikh, Sony Chacko, Ajit Khaparde, Shradha Shah,
	Ron Mercer, Michael Chan, Subbu Seetharaman

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 (34):
  bnx2: Use pci_enable_msix_range()
  bnx2x: Use pci_enable_msix_range()
  tg3: Use pci_enable_msix_range()
  bna: Use pci_enable_msix_range()
  cxgb3: Remove superfluous call to pci_disable_msix()
  cxgb3: Use pci_enable_msix_range()
  cxgb4: Use pci_enable_msix_range()
  cxgb4vf: Remove superfluous call to pci_disable_msix()
  cxgb4vf: Use pci_enable_msix_range()
  enic: Use pci_enable_msix_range()
  benet: Use pci_enable_msix_range()
  e1000e: Use pci_enable_msix_range()
  i40e: Use pci_enable_msix_range()
  igb: Use pci_enable_msix_range()
  igbvf: Use pci_enable_msix_range()
  ixgbe: Use pci_enable_msix_range()
  ixgbevf: Use pci_enable_msix_range()
  mlx4: Use pci_enable_msix_range()
  mlx5: Use pci_enable_msix_range()
  myri10ge: Use pci_enable_msix_range()
  s2io: Use pci_enable_msix_range()
  vxge: Use pci_enable_msix_range()
  forcedeth: Fix invalid errno reporting in nv_request_irq()
  forcedeth: Cleanup MSI-X to MSI to INTx fallback code
  forcedeth: Use pci_enable_msix_range()
  netxen: Use pci_enable_msix_range()
  qlcnic: Cleanup qlcnic_enable_msix() return values
  qlcnic: Use pci_enable_msix_range()
  qlge: Get rid of an redundant assignment
  qlge: Use pci_enable_msix_range()
  efx: Use pci_enable_msix_range()
  niu: Use pci_enable_msix_range()
  vmxnet3: Fix MSI-X/MSI enablement code
  vmxnet3: Use pci_enable_msix_range()

 drivers/net/ethernet/broadcom/bnx2.c               |   15 +--
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c    |   48 ++++-----
 drivers/net/ethernet/broadcom/tg3.c                |    6 +-
 drivers/net/ethernet/brocade/bna/bnad.c            |   23 ++---
 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c    |   26 ++---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c    |   50 +++++-----
 .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c    |   35 +++----
 drivers/net/ethernet/cisco/enic/enic_main.c        |    6 +-
 drivers/net/ethernet/emulex/benet/be_main.c        |   31 +++---
 drivers/net/ethernet/intel/e1000e/netdev.c         |    9 +-
 drivers/net/ethernet/intel/i40e/i40e_main.c        |   33 +-----
 drivers/net/ethernet/intel/igb/igb_main.c          |    9 +-
 drivers/net/ethernet/intel/igbvf/netdev.c          |    6 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c       |   16 +--
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c  |   33 ++----
 drivers/net/ethernet/mellanox/mlx4/main.c          |   19 +---
 drivers/net/ethernet/mellanox/mlx5/core/main.c     |   16 +--
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c   |   32 +++---
 drivers/net/ethernet/neterion/s2io.c               |    5 +-
 drivers/net/ethernet/neterion/vxge/vxge-main.c     |   15 ++-
 drivers/net/ethernet/nvidia/forcedeth.c            |   41 +++++---
 .../net/ethernet/qlogic/netxen/netxen_nic_main.c   |    5 +-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   18 ++--
 drivers/net/ethernet/qlogic/qlge/qlge_main.c       |   16 +--
 drivers/net/ethernet/sfc/efx.c                     |   20 ++--
 drivers/net/ethernet/sun/niu.c                     |   11 +--
 drivers/net/vmxnet3/vmxnet3_drv.c                  |  110 ++++++++-----------
 27 files changed, 274 insertions(+), 380 deletions(-)

-- 
1.7.7.6


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 31/34] efx: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 31/34] efx: " Alexander Gordeev
@ 2014-01-31 17:21   ` Shradha Shah
  0 siblings, 0 replies; 57+ messages in thread
From: Shradha Shah @ 2014-01-31 17:21 UTC (permalink / raw)
  To: Alexander Gordeev; +Cc: linux-kernel, Solarflare maintainers, netdev, linux-pci

On 01/31/2014 03:08 PM, Alexander Gordeev wrote:
> 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.
> 
> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>

Acked-by: Shradha Shah <sshah@solarflare.com>

> ---
>  drivers/net/ethernet/sfc/efx.c |   20 +++++++++-----------
>  1 files changed, 9 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
> index 83d4643..297b97a 100644
> --- a/drivers/net/ethernet/sfc/efx.c
> +++ b/drivers/net/ethernet/sfc/efx.c
> @@ -1346,20 +1346,23 @@ static int efx_probe_interrupts(struct efx_nic *efx)
>  
>  		for (i = 0; i < n_channels; i++)
>  			xentries[i].entry = i;
> -		rc = pci_enable_msix(efx->pci_dev, xentries, n_channels);
> -		if (rc > 0) {
> +		rc = pci_enable_msix_range(efx->pci_dev,
> +					   xentries, 1, n_channels);
> +		if (rc < 0) {
> +			/* Fall back to single channel MSI */
> +			efx->interrupt_mode = EFX_INT_MODE_MSI;
> +			netif_err(efx, drv, efx->net_dev,
> +				  "could not enable MSI-X\n");
> +		} else if (rc < n_channels) {
>  			netif_err(efx, drv, efx->net_dev,
>  				  "WARNING: Insufficient MSI-X vectors"
>  				  " available (%d < %u).\n", rc, n_channels);
>  			netif_err(efx, drv, efx->net_dev,
>  				  "WARNING: Performance may be reduced.\n");
> -			EFX_BUG_ON_PARANOID(rc >= n_channels);
>  			n_channels = rc;
> -			rc = pci_enable_msix(efx->pci_dev, xentries,
> -					     n_channels);
>  		}
>  
> -		if (rc == 0) {
> +		if (rc > 0) {
>  			efx->n_channels = n_channels;
>  			if (n_channels > extra_channels)
>  				n_channels -= extra_channels;
> @@ -1375,11 +1378,6 @@ static int efx_probe_interrupts(struct efx_nic *efx)
>  			for (i = 0; i < efx->n_channels; i++)
>  				efx_get_channel(efx, i)->irq =
>  					xentries[i].vector;
> -		} else {
> -			/* Fall back to single channel MSI */
> -			efx->interrupt_mode = EFX_INT_MODE_MSI;
> -			netif_err(efx, drv, efx->net_dev,
> -				  "could not enable MSI-X\n");
>  		}
>  	}
>  
> 

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 02/34] bnx2x: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 02/34] bnx2x: " Alexander Gordeev
@ 2014-01-31 19:11   ` Sergei Shtylyov
  0 siblings, 0 replies; 57+ messages in thread
From: Sergei Shtylyov @ 2014-01-31 19:11 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel; +Cc: Ariel Elior, netdev, linux-pci

Hello.

On 01/31/2014 06:08 PM, Alexander Gordeev wrote:

> 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.

> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |   48 ++++++++++-------------
>   1 files changed, 21 insertions(+), 27 deletions(-)

> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> index 9d7419e..b396d74 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> @@ -1638,24 +1638,36 @@ int bnx2x_enable_msix(struct bnx2x *bp)
>   	DP(BNX2X_MSG_SP, "about to request enable msix with %d vectors\n",
>   	   msix_vec);
>
> -	rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], msix_vec);
> -
> +	rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0],
> +				   BNX2X_MIN_MSIX_VEC_CNT(bp), msix_vec);
>   	/*
>   	 * reconfigure number of tx/rx queues according to available
>   	 * MSI-X vectors
>   	 */
> -	if (rc >= BNX2X_MIN_MSIX_VEC_CNT(bp)) {
> +	if (rc < 0) {
> +		BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
> +		goto no_msix;
> +	} else if (rc == -ENOSPC) {

    This branch is unreachable now. You should have put this check first.

> +		/* Get by with single vector */
> +		rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0], 1, 1);
> +		if (rc < 0) {
> +			BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n",
> +				       rc);
> +			goto no_msix;
> +		}
> +
> +		BNX2X_DEV_INFO("Using single MSI-X vector\n");
> +		bp->flags |= USING_SINGLE_MSIX_FLAG;
> +
> +		BNX2X_DEV_INFO("set number of queues to 1\n");
> +		bp->num_ethernet_queues = 1;
> +		bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
> +	} else if (rc < msix_vec) {

WBR, Sergei




^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 12/34] e1000e: Use pci_enable_msix_range()
  2014-01-31 15:08   ` Alexander Gordeev
  (?)
@ 2014-01-31 19:17   ` Sergei Shtylyov
  -1 siblings, 0 replies; 57+ messages in thread
From: Sergei Shtylyov @ 2014-01-31 19:17 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel
  Cc: Jeff Kirsher, Jesse Brandeburg, Bruce Allan, e1000-devel, netdev,
	linux-pci

Hello.

On 01/31/2014 06:08 PM, Alexander Gordeev wrote:

> 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.

> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>   drivers/net/ethernet/intel/e1000e/netdev.c |    9 +++++----
>   1 files changed, 5 insertions(+), 4 deletions(-)

> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 6d91933..7735d1a 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -2041,10 +2041,11 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
>   				for (i = 0; i < adapter->num_vectors; i++)
>   					adapter->msix_entries[i].entry = i;
>
> -				err = pci_enable_msix(adapter->pdev,
> -						      adapter->msix_entries,
> -						      adapter->num_vectors);
> -				if (err == 0)
> +				err = pci_enable_msix_range(adapter->pdev,
> +							adapter->msix_entries,
> +							adapter->num_vectors,
> +							adapter->num_vectors);

    You should align all 'adapter' references under each other, according to 
networking coding rules.

WBR, Sergei


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 17/34] ixgbevf: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 17/34] ixgbevf: " Alexander Gordeev
@ 2014-01-31 19:20   ` Sergei Shtylyov
  0 siblings, 0 replies; 57+ messages in thread
From: Sergei Shtylyov @ 2014-01-31 19:20 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel
  Cc: Jeff Kirsher, Jesse Brandeburg, Bruce Allan, e1000-devel, netdev,
	linux-pci

On 01/31/2014 06:08 PM, Alexander Gordeev wrote:

> 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.

> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>   drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   33 +++++++-------------
>   1 files changed, 12 insertions(+), 21 deletions(-)

> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> index 9df2898..521a9d7 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

> @@ -1831,33 +1830,25 @@ static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
>   	 * Right now, we simply care about how many we'll get; we'll
>   	 * set them up later while requesting irq's.
>   	 */
> -	while (vectors >= vector_threshold) {
> -		err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
> -				      vectors);
> -		if (!err || err < 0) /* Success or a nasty failure. */
> -			break;
> -		else /* err == number of vectors we should try again with */
> -			vectors = err;
> -	}
> +	vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
> +					vector_threshold, vectors);
>
> -	if (vectors < vector_threshold)
> -		err = -ENOMEM;
> -
> -	if (err) {
> +	if (vectors < 0) {
>   		dev_err(&adapter->pdev->dev,
>   			"Unable to allocate MSI-X interrupts\n");
>   		kfree(adapter->msix_entries);
>   		adapter->msix_entries = NULL;
> -	} else {
> -		/*
> -		 * Adjust for only the vectors we'll use, which is minimum
> -		 * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
> -		 * vectors we were allocated.
> -		 */
> -		adapter->num_msix_vectors = vectors;
> +		return vectors;
>   	}
>
> -	return err;
> +	/*
> +	 * Adjust for only the vectors we'll use, which is minimum
> +	 * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
> +	 * vectors we were allocated.
> +	 */

    Networking code formats multi-line comments slightly differently to the 
rest of the kernel:

/* bla
  * bla
  */

    Although, you're only moving what was there before you, maybe it's a good 
time to get this right.

WBR, Sergei


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 18/34] mlx4: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 18/34] mlx4: " Alexander Gordeev
@ 2014-01-31 19:22   ` Sergei Shtylyov
  2014-02-02  9:43   ` Amir Vadai
  1 sibling, 0 replies; 57+ messages in thread
From: Sergei Shtylyov @ 2014-01-31 19:22 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel
  Cc: David S. Miller, Amir Vadai, netdev, linux-pci

Hello.

On 01/31/2014 06:08 PM, Alexander Gordeev wrote:

> 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.

> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>   drivers/net/ethernet/mellanox/mlx4/main.c |   19 ++++---------------
>   1 files changed, 4 insertions(+), 15 deletions(-)

> diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
> index d711158..a9d1249 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/main.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
[...]
> @@ -1990,22 +1989,12 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
[...]
> +		nreq = pci_enable_msix_range(dev->pdev, entries, 2, nreq);
> +
> +		if (nreq < 0) {
>   			kfree(entries);
>   			goto no_msi;
> -		}
> -
> -		if (nreq <
> +		} else if (nreq <
>   		    MSIX_LEGACY_SZ + dev->caps.num_ports * MIN_MSIX_P_PORT) {

    Please realign this line to start right under 'nreq'.

WBR, Sergei


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 20/34] myri10ge: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 20/34] myri10ge: " Alexander Gordeev
@ 2014-01-31 19:24   ` Sergei Shtylyov
  2014-02-01 14:13     ` Hyong-Youb Kim
  0 siblings, 1 reply; 57+ messages in thread
From: Sergei Shtylyov @ 2014-01-31 19:24 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel; +Cc: Hyong-Youb Kim, netdev, linux-pci

Hello.

On 01/31/2014 06:08 PM, Alexander Gordeev wrote:

> 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.

> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>   drivers/net/ethernet/myricom/myri10ge/myri10ge.c |   32 ++++++++++-----------
>   1 files changed, 15 insertions(+), 17 deletions(-)

> diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
> index 68026f7..9f717d6 100644
> --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
> +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
> @@ -2329,16 +2329,14 @@ static int myri10ge_request_irq(struct myri10ge_priv *mgp)
>   	status = 0;
>   	if (myri10ge_msi) {
>   		if (mgp->num_slices > 1) {
> -			status =
> -			    pci_enable_msix(pdev, mgp->msix_vectors,
> -					    mgp->num_slices);
> -			if (status == 0) {
> -				mgp->msix_enabled = 1;
> -			} else {
> +			status = pci_enable_msix_range(pdev, mgp->msix_vectors,
> +					mgp->num_slices, mgp->num_slices);
> +			if (status < 0) {
>   				dev_err(&pdev->dev,
>   					"Error %d setting up MSI-X\n", status);
>   				return status;
>   			}
> +			mgp->msix_enabled = 1;
>   		}
>   		if (mgp->msix_enabled == 0) {
>   			status = pci_enable_msi(pdev);
> @@ -3901,23 +3899,23 @@ static void myri10ge_probe_slices(struct myri10ge_priv *mgp)
>   	}
>
>   	while (mgp->num_slices > 1) {
> -		/* make sure it is a power of two */
> -		while (!is_power_of_2(mgp->num_slices))
> -			mgp->num_slices--;
> +		mgp->num_slices = rounddown_pow_of_two(mgp->num_slices);
>   		if (mgp->num_slices == 1)
>   			goto disable_msix;
> -		status = pci_enable_msix(pdev, mgp->msix_vectors,
> -					 mgp->num_slices);
> -		if (status == 0) {
> -			pci_disable_msix(pdev);
> +		status = pci_enable_msix_range(pdev, mgp->msix_vectors,
> +					mgp->num_slices, mgp->num_slices);

    The continuation line(s) should be aligned to start right under 'pdev', 
according to the networking coding rules.

> +		if (status < 0)
> +			goto disable_msix;

    Hm, if enabling MSI failed, we don't need to disable it, right? So, 
perhaps the label should be renamed?

> +
> +		pci_disable_msix(pdev);
> +
> +		if (status == mgp->num_slices) {
>   			if (old_allocated)
>   				kfree(old_fw);
>   			return;
> -		}
> -		if (status > 0)
> +		} else {
>   			mgp->num_slices = status;
> -		else
> -			goto disable_msix;
> +		}
>   	}
>
>   disable_msix:

WBR, Sergei


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 01/34] bnx2: " Alexander Gordeev
@ 2014-01-31 21:30   ` David Miller
  2014-02-11  0:38     ` Bjorn Helgaas
  0 siblings, 1 reply; 57+ messages in thread
From: David Miller @ 2014-01-31 21:30 UTC (permalink / raw)
  To: agordeev; +Cc: linux-kernel, mchan, netdev, linux-pci


Please submit this patch series when the net-next tree opens back up,
I'm only accepting bug fixes at this time.

Also, please always provide a proper "00/NN" openning posting for a
patch series, that gives background and high level information about
what your patch series is trying to achieve and how it achieves it.

That way people reviewing the patches know what to expect, and why,
and I have exactly one posting to reply to if I apply the whole
series.

Thank you.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 20/34] myri10ge: Use pci_enable_msix_range()
  2014-01-31 19:24   ` Sergei Shtylyov
@ 2014-02-01 14:13     ` Hyong-Youb Kim
  0 siblings, 0 replies; 57+ messages in thread
From: Hyong-Youb Kim @ 2014-02-01 14:13 UTC (permalink / raw)
  To: Sergei Shtylyov, Alexander Gordeev, linux-kernel
  Cc: Hyong-Youb Kim, netdev, linux-pci


On 2/1/2014 4:24 AM, Sergei Shtylyov wrote:
> Hello.
>
> On 01/31/2014 06:08 PM, Alexander Gordeev wrote:
>
[...]
>> +        if (status < 0)
>> +            goto disable_msix;
>
>     Hm, if enabling MSI failed, we don't need to disable it, right? So,
> perhaps the label should be renamed?
>

The code following disable_msix does not call pci_disable_msix().  It 
frees the allocated vector buffer and loads the firmware that uses a 
single interrupt vector.  So, it is "disable" in the sense that the 
driver is not going to use MSI-X vectors.  I agree that naming could be 
better.

disable_msix:
         if (mgp->msix_vectors != NULL) {
                 kfree(mgp->msix_vectors);
                 mgp->msix_vectors = NULL;
         }

abort_with_fw:
         mgp->num_slices = 1;
         set_fw_name(mgp, old_fw, old_allocated);
         myri10ge_load_firmware(mgp, 0);

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: mlx4: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 18/34] mlx4: " Alexander Gordeev
  2014-01-31 19:22   ` Sergei Shtylyov
@ 2014-02-02  9:43   ` Amir Vadai
  1 sibling, 0 replies; 57+ messages in thread
From: Amir Vadai @ 2014-02-02  9:43 UTC (permalink / raw)
  To: Alexander Gordeev; +Cc: linux-kernel, David S. Miller, netdev, linux-pci

On 31/01/14 16:08 +0100, Alexander Gordeev wrote:
> 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.
> 
> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>  drivers/net/ethernet/mellanox/mlx4/main.c |   19 ++++---------------
>  1 files changed, 4 insertions(+), 15 deletions(-)
> 

Acked By: Amir Vadai <amirv@mellanox.com>


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH 11/34] benet: Use pci_enable_msix_range()
  2014-01-31 15:08 ` [PATCH 11/34] benet: " Alexander Gordeev
@ 2014-02-03  6:21   ` Sathya Perla
  0 siblings, 0 replies; 57+ messages in thread
From: Sathya Perla @ 2014-02-03  6:21 UTC (permalink / raw)
  To: Alexander Gordeev, linux-kernel
  Cc: Subramanian Seetharaman, Ajit Khaparde, netdev, linux-pci

> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On Behalf
> Of 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.
> 
> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>

Acked-by: Sathya Perla < sathya.perla@emulex.com>

> ---
>  drivers/net/ethernet/emulex/benet/be_main.c |   31 +++++++++++---------------
>  1 files changed, 13 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/net/ethernet/emulex/benet/be_main.c
> b/drivers/net/ethernet/emulex/benet/be_main.c
> index 04ac9c6..f55c09b 100644
> --- a/drivers/net/ethernet/emulex/benet/be_main.c
> +++ b/drivers/net/ethernet/emulex/benet/be_main.c
> @@ -2505,7 +2505,7 @@ static void be_msix_disable(struct be_adapter *adapter)
> 
>  static int be_msix_enable(struct be_adapter *adapter)
>  {
> -	int i, status, num_vec;
> +	int i, num_vec;
>  	struct device *dev = &adapter->pdev->dev;
> 
>  	/* If RoCE is supported, program the max number of NIC vectors that
> @@ -2521,24 +2521,11 @@ static int be_msix_enable(struct be_adapter *adapter)
>  	for (i = 0; i < num_vec; i++)
>  		adapter->msix_entries[i].entry = i;
> 
> -	status = pci_enable_msix(adapter->pdev, adapter->msix_entries, num_vec);
> -	if (status == 0) {
> -		goto done;
> -	} else if (status >= MIN_MSIX_VECTORS) {
> -		num_vec = status;
> -		status = pci_enable_msix(adapter->pdev, adapter->msix_entries,
> -					 num_vec);
> -		if (!status)
> -			goto done;
> -	}
> +	num_vec = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
> +					MIN_MSIX_VECTORS, num_vec);
> +	if (num_vec < 0)
> +		goto fail;
> 
> -	dev_warn(dev, "MSIx enable failed\n");
> -
> -	/* INTx is not supported in VFs, so fail probe if enable_msix fails */
> -	if (!be_physfn(adapter))
> -		return status;
> -	return 0;
> -done:
>  	if (be_roce_supported(adapter) && num_vec > MIN_MSIX_VECTORS) {
>  		adapter->num_msix_roce_vec = num_vec / 2;
>  		dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
> @@ -2550,6 +2537,14 @@ done:
>  	dev_info(dev, "enabled %d MSI-x vector(s) for NIC\n",
>  		 adapter->num_msix_vec);
>  	return 0;
> +
> +fail:
> +	dev_warn(dev, "MSIx enable failed\n");
> +
> +	/* INTx is not supported in VFs, so fail probe if enable_msix fails */
> +	if (!be_physfn(adapter))
> +		return num_vec;
> +	return 0;
>  }
> 
>  static inline int be_msix_vec_get(struct be_adapter *adapter,
> --
> 1.7.7.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-01-31 21:30   ` David Miller
@ 2014-02-11  0:38     ` Bjorn Helgaas
  2014-02-11  1:08       ` Bjorn Helgaas
  2014-02-11  8:01       ` Alexander Gordeev
  0 siblings, 2 replies; 57+ messages in thread
From: Bjorn Helgaas @ 2014-02-11  0:38 UTC (permalink / raw)
  To: David Miller; +Cc: agordeev, linux-kernel, mchan, netdev, linux-pci

On Fri, Jan 31, 2014 at 01:30:51PM -0800, David Miller wrote:
> 
> Please submit this patch series when the net-next tree opens back up,
> I'm only accepting bug fixes at this time.
> 
> Also, please always provide a proper "00/NN" openning posting for a
> patch series, that gives background and high level information about
> what your patch series is trying to achieve and how it achieves it.
> 
> That way people reviewing the patches know what to expect, and why,
> and I have exactly one posting to reply to if I apply the whole
> series.

I *think* this whole series applies to drivers/net (the usual patch sending
tools like "stg mail" insert the diffstat automatically in the 00/nn
message), and it sounds like David is willing to apply them via his tree,
so I'm ignoring these for now.  Let me know if you need me to do anything.

Bjorn

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-02-11  0:38     ` Bjorn Helgaas
@ 2014-02-11  1:08       ` Bjorn Helgaas
  2014-02-12 13:26         ` Alexander Gordeev
  2014-02-11  8:01       ` Alexander Gordeev
  1 sibling, 1 reply; 57+ messages in thread
From: Bjorn Helgaas @ 2014-02-11  1:08 UTC (permalink / raw)
  To: David Miller; +Cc: agordeev, linux-kernel, mchan, netdev, linux-pci

On Mon, Feb 10, 2014 at 05:38:14PM -0700, Bjorn Helgaas wrote:
> On Fri, Jan 31, 2014 at 01:30:51PM -0800, David Miller wrote:
> > 
> > Please submit this patch series when the net-next tree opens back up,
> > I'm only accepting bug fixes at this time.
> > 
> > Also, please always provide a proper "00/NN" openning posting for a
> > patch series, that gives background and high level information about
> > what your patch series is trying to achieve and how it achieves it.
> > 
> > That way people reviewing the patches know what to expect, and why,
> > and I have exactly one posting to reply to if I apply the whole
> > series.
> 
> I *think* this whole series applies to drivers/net (the usual patch sending
> tools like "stg mail" insert the diffstat automatically in the 00/nn
> message), and it sounds like David is willing to apply them via his tree,
> so I'm ignoring these for now.  Let me know if you need me to do anything.

I skimmed these and the scsi patches, and I think you were right in
proposing an MSI-X enable function that takes a single "number of vectors"
argument, in addition to pci_enable_msix_range(), which takes a minimum and
a maximum.  Obviously the pci_enable_msix_fixed() or whatever could be a
simple #define wrapper or something.

Of the fifty-some net and scsi patches, I counted 23 that use the min ==
max pattern, and it seems a shame to have to repeat that expression.

BTW, I noticed that Documentation/PCI/MSI-HOWTO.txt uses
pci_enable_msi_range() in some of the examples that are really talking
about pci_enable_msix_range() (4.3.1.1 and 4.3.1.2, at least).

Bjorn

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-02-11  0:38     ` Bjorn Helgaas
  2014-02-11  1:08       ` Bjorn Helgaas
@ 2014-02-11  8:01       ` Alexander Gordeev
  1 sibling, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-02-11  8:01 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: David Miller, linux-kernel, mchan, netdev, linux-pci

On Mon, Feb 10, 2014 at 05:38:14PM -0700, Bjorn Helgaas wrote:
> I *think* this whole series applies to drivers/net (the usual patch sending
> tools like "stg mail" insert the diffstat automatically in the 00/nn
> message), and it sounds like David is willing to apply them via his tree,
> so I'm ignoring these for now.  Let me know if you need me to do anything.

Hi Bjorn,

Unlike just a handful of patches concerning pci_enable_msi_range(), some
few dozens of pci_enable_msix_range() updates would be difficult to route
thru your tree. So for net and scsi (and block is pending) I am putting
linux-pci on CC just to let you know what is happening.

> Bjorn

-- 
Regards,
Alexander Gordeev
agordeev@redhat.com

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-02-11  1:08       ` Bjorn Helgaas
@ 2014-02-12 13:26         ` Alexander Gordeev
  2014-02-12 17:00           ` Bjorn Helgaas
  0 siblings, 1 reply; 57+ messages in thread
From: Alexander Gordeev @ 2014-02-12 13:26 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-kernel, linux-pci

On Mon, Feb 10, 2014 at 06:08:03PM -0700, Bjorn Helgaas wrote:
> I skimmed these and the scsi patches, and I think you were right in
> proposing an MSI-X enable function that takes a single "number of vectors"
> argument, in addition to pci_enable_msix_range(), which takes a minimum and
> a maximum.  Obviously the pci_enable_msix_fixed() or whatever could be a
> simple #define wrapper or something.
> 
> Of the fifty-some net and scsi patches, I counted 23 that use the min ==
> max pattern, and it seems a shame to have to repeat that expression.

(un-CCing netdev@vger.kernel.org)

Hi Bjorn,

I propose pci_enable_msix_exact(pdev, entries, nvec) rather than
pci_enable_msix_fixed().

Do you prefer this one to return 0/-errno or nvec/-errno?

Do you want pci_enable_msi_exact() in addition to pci_enable_msix_exact()?

Thanks!

> Bjorn

-- 
Regards,
Alexander Gordeev
agordeev@redhat.com

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-02-12 13:26         ` Alexander Gordeev
@ 2014-02-12 17:00           ` Bjorn Helgaas
  2014-02-12 18:08             ` Alexander Gordeev
  0 siblings, 1 reply; 57+ messages in thread
From: Bjorn Helgaas @ 2014-02-12 17:00 UTC (permalink / raw)
  To: Alexander Gordeev; +Cc: linux-kernel, linux-pci

On Wed, Feb 12, 2014 at 6:26 AM, Alexander Gordeev <agordeev@redhat.com> wrote:
> On Mon, Feb 10, 2014 at 06:08:03PM -0700, Bjorn Helgaas wrote:
>> I skimmed these and the scsi patches, and I think you were right in
>> proposing an MSI-X enable function that takes a single "number of vectors"
>> argument, in addition to pci_enable_msix_range(), which takes a minimum and
>> a maximum.  Obviously the pci_enable_msix_fixed() or whatever could be a
>> simple #define wrapper or something.
>>
>> Of the fifty-some net and scsi patches, I counted 23 that use the min ==
>> max pattern, and it seems a shame to have to repeat that expression.
>
> (un-CCing netdev@vger.kernel.org)
>
> Hi Bjorn,
>
> I propose pci_enable_msix_exact(pdev, entries, nvec) rather than
> pci_enable_msix_fixed().

OK, that sounds fine.

> Do you prefer this one to return 0/-errno or nvec/-errno?

0/-errno seems right to me.  We are asking for a very specific thing,
and returning nvec doesn't give the caller any additional information
(since the caller supplied nvec in the first place), so simple
success/failure is what I would expect.

> Do you want pci_enable_msi_exact() in addition to pci_enable_msix_exact()?

If there are cases where pci_enable_msi_exact() would be used, I guess
the same arguments would apply, so yes.  I haven't looked at the
archives, but I have this nagging feeling that this is exactly what
you proposed initially, and I had some objection.  If so, I'm sorry
about changing my mind :)

Bjorn

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
  2014-02-12 17:00           ` Bjorn Helgaas
@ 2014-02-12 18:08             ` Alexander Gordeev
  0 siblings, 0 replies; 57+ messages in thread
From: Alexander Gordeev @ 2014-02-12 18:08 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-kernel, linux-pci

On Wed, Feb 12, 2014 at 10:00:28AM -0700, Bjorn Helgaas wrote:
> > Do you want pci_enable_msi_exact() in addition to pci_enable_msix_exact()?
> 
> If there are cases where pci_enable_msi_exact() would be used, I guess
> the same arguments would apply, so yes.  I haven't looked at the

Just a handful of cases in the tree where it could be used for MSI right now,
but still - they do exist.

> archives, but I have this nagging feeling that this is exactly what
> you proposed initially, and I had some objection.  If so, I'm sorry
> about changing my mind :)

You are on PCI guard, no worries ;)

> Bjorn

-- 
Regards,
Alexander Gordeev
agordeev@redhat.com

^ permalink raw reply	[flat|nested] 57+ messages in thread

end of thread, other threads:[~2014-02-12 18:06 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-31 15:46 [PATCH 00/34] net: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:46 ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 01/34] bnx2: " Alexander Gordeev
2014-01-31 21:30   ` David Miller
2014-02-11  0:38     ` Bjorn Helgaas
2014-02-11  1:08       ` Bjorn Helgaas
2014-02-12 13:26         ` Alexander Gordeev
2014-02-12 17:00           ` Bjorn Helgaas
2014-02-12 18:08             ` Alexander Gordeev
2014-02-11  8:01       ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 02/34] bnx2x: " Alexander Gordeev
2014-01-31 19:11   ` Sergei Shtylyov
2014-01-31 15:08 ` [PATCH 03/34] tg3: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 04/34] bna: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 05/34] cxgb3: Remove superfluous call to pci_disable_msix() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 06/34] cxgb3: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 07/34] cxgb4: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 08/34] cxgb4vf: Remove superfluous call to pci_disable_msix() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 09/34] cxgb4vf: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 10/34] enic: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 11/34] benet: " Alexander Gordeev
2014-02-03  6:21   ` Sathya Perla
2014-01-31 15:08 ` [PATCH 12/34] e1000e: " Alexander Gordeev
2014-01-31 15:08   ` Alexander Gordeev
2014-01-31 19:17   ` Sergei Shtylyov
2014-01-31 15:08 ` [PATCH 13/34] i40e: " Alexander Gordeev
2014-01-31 15:08   ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 14/34] igb: " Alexander Gordeev
2014-01-31 15:08   ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 15/34] igbvf: " Alexander Gordeev
2014-01-31 15:08   ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 16/34] ixgbe: " Alexander Gordeev
2014-01-31 15:08   ` Alexander Gordeev
2014-01-31 15:08 ` [PATCH 17/34] ixgbevf: " Alexander Gordeev
2014-01-31 19:20   ` Sergei Shtylyov
2014-01-31 15:08 ` [PATCH 18/34] mlx4: " Alexander Gordeev
2014-01-31 19:22   ` Sergei Shtylyov
2014-02-02  9:43   ` Amir Vadai
2014-01-31 15:08 ` [PATCH 19/34] mlx5: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 20/34] myri10ge: " Alexander Gordeev
2014-01-31 19:24   ` Sergei Shtylyov
2014-02-01 14:13     ` Hyong-Youb Kim
2014-01-31 15:08 ` [PATCH 21/34] s2io: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 22/34] vxge: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 23/34] forcedeth: Fix invalid errno reporting in nv_request_irq() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 24/34] forcedeth: Cleanup MSI-X to MSI to INTx fallback code Alexander Gordeev
2014-01-31 15:08 ` [PATCH 25/34] forcedeth: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 26/34] netxen: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 27/34] qlcnic: Cleanup qlcnic_enable_msix() return values Alexander Gordeev
2014-01-31 15:08 ` [PATCH 28/34] qlcnic: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 29/34] qlge: Get rid of an redundant assignment Alexander Gordeev
2014-01-31 15:08 ` [PATCH 30/34] qlge: Use pci_enable_msix_range() Alexander Gordeev
2014-01-31 15:08 ` [PATCH 31/34] efx: " Alexander Gordeev
2014-01-31 17:21   ` Shradha Shah
2014-01-31 15:08 ` [PATCH 32/34] niu: " Alexander Gordeev
2014-01-31 15:08 ` [PATCH 33/34] vmxnet3: Fix MSI-X/MSI enablement code Alexander Gordeev
2014-01-31 15:08 ` [PATCH 34/34] vmxnet3: Use pci_enable_msix_range() Alexander Gordeev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.