[dpdk-dev] bnx2x: Correctly determine MSIX vector count

Message ID 1465597132-11674-1-git-send-email-3chas3@gmail.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Chas Williams June 10, 2016, 10:18 p.m. UTC
  From: "Charles (Chas) Williams" <ciwillia@brocade.com>

If MSIX is available, the vector count given by the table size is one
less than the actual count.  This count also limits the receive and
transmit queue resources the VF can support.

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Chas Williams <ciwillia@brocade.com>
---
 drivers/net/bnx2x/bnx2x.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
  

Comments

Ferruh Yigit June 17, 2016, 4:25 p.m. UTC | #1
On 6/10/2016 11:18 PM, Chas Williams wrote:
> From: "Charles (Chas) Williams" <ciwillia@brocade.com>
> 
> If MSIX is available, the vector count given by the table size is one
> less than the actual count.  This count also limits the receive and
> transmit queue resources the VF can support.
> 
> Fixes: 540a211084a7 ("bnx2x: driver core")
> 
> Signed-off-by: Chas Williams <ciwillia@brocade.com>
> ---

Since this patch not acked yet, adding all maintainers to cc
  
Harish Patil June 21, 2016, 5:55 a.m. UTC | #2
>

>From: "Charles (Chas) Williams" <ciwillia@brocade.com>

>

>If MSIX is available, the vector count given by the table size is one

>less than the actual count.  This count also limits the receive and

>transmit queue resources the VF can support.

>

>Fixes: 540a211084a7 ("bnx2x: driver core")

>

>Signed-off-by: Chas Williams <ciwillia@brocade.com>

>---

> drivers/net/bnx2x/bnx2x.c | 8 +++++---

> 1 file changed, 5 insertions(+), 3 deletions(-)

>

>diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c

>index 6edb2f9..4be732f 100644

>--- a/drivers/net/bnx2x/bnx2x.c

>+++ b/drivers/net/bnx2x/bnx2x.c

>@@ -9570,8 +9570,10 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc

>*sc)

> static void bnx2x_init_rte(struct bnx2x_softc *sc)

> {

> 	if (IS_VF(sc)) {

>-		sc->max_tx_queues = BNX2X_VF_MAX_QUEUES_PER_VF;

>-		sc->max_rx_queues = BNX2X_VF_MAX_QUEUES_PER_VF;

>+		sc->max_tx_queues = min(BNX2X_VF_MAX_QUEUES_PER_VF,

>+					sc->igu_sb_cnt);

>+		sc->max_rx_queues = min(BNX2X_VF_MAX_QUEUES_PER_VF,

>+					sc->igu_sb_cnt);

> 	} else {

> 		sc->max_tx_queues = 128;

> 		sc->max_rx_queues = 128;

>@@ -9713,7 +9715,7 @@ int bnx2x_attach(struct bnx2x_softc *sc)

> 		pci_read(sc,

> 			 (sc->devinfo.pcie_msix_cap_reg + PCIR_MSIX_CTRL), &val,

> 			 2);

>-		sc->igu_sb_cnt = (val & PCIM_MSIXCTRL_TABLE_SIZE);

>+		sc->igu_sb_cnt = (val & PCIM_MSIXCTRL_TABLE_SIZE) + 1;

> 	} else {

> 		sc->igu_sb_cnt = 1;

> 	}

>-- 

>2.5.5

>

>


Acked-by: Harish Patil <harish.patil@qlogic.com>
  
Bruce Richardson June 21, 2016, 10:12 a.m. UTC | #3
On Tue, Jun 21, 2016 at 05:55:19AM +0000, Harish Patil wrote:
> >
> >From: "Charles (Chas) Williams" <ciwillia@brocade.com>
> >
> >If MSIX is available, the vector count given by the table size is one
> >less than the actual count.  This count also limits the receive and
> >transmit queue resources the VF can support.
> >
> >Fixes: 540a211084a7 ("bnx2x: driver core")
> >
> >Signed-off-by: Chas Williams <ciwillia@brocade.com>
<snip>
> 
> Acked-by: Harish Patil <harish.patil@qlogic.com>
> 
Applied to dpdk-next-net/rel_16_07

/Bruce
  

Patch

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 6edb2f9..4be732f 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -9570,8 +9570,10 @@  static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
 static void bnx2x_init_rte(struct bnx2x_softc *sc)
 {
 	if (IS_VF(sc)) {
-		sc->max_tx_queues = BNX2X_VF_MAX_QUEUES_PER_VF;
-		sc->max_rx_queues = BNX2X_VF_MAX_QUEUES_PER_VF;
+		sc->max_tx_queues = min(BNX2X_VF_MAX_QUEUES_PER_VF,
+					sc->igu_sb_cnt);
+		sc->max_rx_queues = min(BNX2X_VF_MAX_QUEUES_PER_VF,
+					sc->igu_sb_cnt);
 	} else {
 		sc->max_tx_queues = 128;
 		sc->max_rx_queues = 128;
@@ -9713,7 +9715,7 @@  int bnx2x_attach(struct bnx2x_softc *sc)
 		pci_read(sc,
 			 (sc->devinfo.pcie_msix_cap_reg + PCIR_MSIX_CTRL), &val,
 			 2);
-		sc->igu_sb_cnt = (val & PCIM_MSIXCTRL_TABLE_SIZE);
+		sc->igu_sb_cnt = (val & PCIM_MSIXCTRL_TABLE_SIZE) + 1;
 	} else {
 		sc->igu_sb_cnt = 1;
 	}