All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/4] bnx2x: Update documentation
@ 2016-04-01  0:15 Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 2/4] bnx2x: Fix Tx Performance Rasesh Mody
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Rasesh Mody @ 2016-04-01  0:15 UTC (permalink / raw)
  To: dev; +Cc: ameen.rahman, Rasesh Mody, Harish Patil

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com>
---
 doc/guides/nics/bnx2x.rst    |    1 +
 doc/guides/nics/overview.rst |   20 ++++++++++----------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst
index ed0e5e5..df8fb47 100644
--- a/doc/guides/nics/bnx2x.rst
+++ b/doc/guides/nics/bnx2x.rst
@@ -60,6 +60,7 @@ The features not yet supported include:
 - LRO/TSO offload
 - Checksum offload
 - SR-IOV PF
+- Rx TX scatter gather
 
 Co-existence considerations
 ---------------------------
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 542479a..65c6417 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -86,8 +86,8 @@ Most of these differences are summarized below.
                                           e   e       e   e   e                     e
                                           c   c       c   c   c                     c
    ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-   link status                  X       X X                                   X X
-   link status event                    X X                                     X
+   link status            X X   X       X X                                   X X
+   link status event      X X           X X                                     X
    queue status event                                                           X
    Rx interrupt                         X X X X
    queue start/stop             X   X   X X X X                               X
@@ -96,15 +96,15 @@ Most of these differences are summarized below.
    scattered Rx                 X   X   X X X X                               X
    LRO
    TSO                          X   X   X X X X
-   promiscuous mode             X       X X X X                               X
+   promiscuous mode       X X   X       X X X X                               X
    allmulticast mode            X       X X X X                               X
-   unicast MAC filter                   X X X X
-   multicast MAC filter                 X X X X
+   unicast MAC filter     X X           X X X X
+   multicast MAC filter   X X           X X X X
    RSS hash                     X   X   X X X X
    RSS key update                   X   X X X X
    RSS reta update                  X   X X X X
    VMDq                                 X X
-   SR-IOV                           X   X X
+   SR-IOV                   X       X   X X
    DCB                                  X X
    VLAN filter                          X X X X
    ethertype filter                     X X
@@ -126,14 +126,14 @@ Most of these differences are summarized below.
    inner L4 checksum                X   X   X
    packet type parsing          X       X   X
    timesync                             X X
-   basic stats                  X   X   X X X X                               X X
+   basic stats            X X   X   X   X X X X                               X X
    extended stats                   X   X X X X
    stats per queue              X                                             X
    EEPROM dump
    registers dump
    multiprocess aware                   X X X X
    BSD nic_uio                  X       X X X X
-   Linux UIO                    X   X   X X X X
+   Linux UIO              X X   X   X   X X X X
    Linux VFIO                   X       X X X X
    other kdrv                                                                 X
    ARMv7
@@ -141,8 +141,8 @@ Most of these differences are summarized below.
    Power8
    TILE-Gx
    x86-32                       X   X   X X X X                                 X
-   x86-64                       X   X   X X X X                               X X
-   usage doc                    X                                             X
+   x86-64                 X X   X   X   X X X X                               X X
+   usage doc              X X   X                                             X
    design doc
    perf doc
    ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-- 
1.7.10.3

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

* [PATCH v2 2/4] bnx2x: Fix Tx Performance
  2016-04-01  0:15 [PATCH v2 1/4] bnx2x: Update documentation Rasesh Mody
@ 2016-04-01  0:15 ` Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 3/4] bnx2x: Enhance stats get routine Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody
  2 siblings, 0 replies; 5+ messages in thread
From: Rasesh Mody @ 2016-04-01  0:15 UTC (permalink / raw)
  To: dev; +Cc: ameen.rahman, Rasesh Mody, Harish Patil

Change the Tx routine logic to ring the doorbell once per burst and not
on every Tx packet. This driver-level optimization is necessary to achieve
line rates for larger frame sizes (1k or more).

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

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com>
---
 drivers/net/bnx2x/bnx2x.c      |  207 ++++++++++++++++++----------------------
 drivers/net/bnx2x/bnx2x.h      |    4 +-
 drivers/net/bnx2x/bnx2x_rxtx.c |   45 ++++-----
 3 files changed, 118 insertions(+), 138 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 6edb2f9..149fdef 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -1293,7 +1293,7 @@ bnx2x_free_tx_pkt(__rte_unused struct bnx2x_fastpath *fp, struct bnx2x_tx_queue
 	struct rte_mbuf *tx_mbuf = txq->sw_ring[TX_BD(pkt_idx, txq)];
 
 	if (likely(tx_mbuf != NULL)) {
-		rte_pktmbuf_free(tx_mbuf);
+		rte_pktmbuf_free_seg(tx_mbuf);
 	} else {
 		PMD_RX_LOG(ERR, "fp[%02d] lost mbuf %lu",
 			   fp->index, (unsigned long)TX_BD(pkt_idx, txq));
@@ -2113,147 +2113,128 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
  * the mbuf and return to the caller.
  *
  * Returns:
- *   0 = Success, !0 = Failure
+ *   Number of TX BDs used for the mbuf
  *   Note the side effect that an mbuf may be freed if it causes a problem.
  */
-int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_pkts)
+uint32_t
+bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0)
 {
-	struct rte_mbuf *m0;
 	struct eth_tx_start_bd *tx_start_bd;
 	uint16_t bd_prod, pkt_prod;
-	int m_tx;
 	struct bnx2x_softc *sc;
 	uint32_t nbds = 0;
-	struct bnx2x_fastpath *fp;
 
 	sc = txq->sc;
-	fp = &sc->fp[txq->queue_id];
 
 	bd_prod = txq->tx_bd_tail;
 	pkt_prod = txq->tx_pkt_tail;
 
-	for (m_tx = 0; m_tx < m_pkts; m_tx++) {
+	txq->sw_ring[TX_BD(pkt_prod, txq)] = m0;
 
-		m0 = *m_head++;
+	tx_start_bd = &txq->tx_ring[TX_BD(bd_prod, txq)].start_bd;
 
-		if (unlikely(txq->nb_tx_avail < 3)) {
-			PMD_TX_LOG(ERR, "no enough bds %d/%d",
-				   bd_prod, txq->nb_tx_avail);
-			return -ENOMEM;
-		}
+	tx_start_bd->addr =
+	    rte_cpu_to_le_64(rte_mbuf_data_dma_addr(m0));
+	tx_start_bd->nbytes = rte_cpu_to_le_16(m0->data_len);
+	tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD;
+	tx_start_bd->general_data =
+	    (1 << ETH_TX_START_BD_HDR_NBDS_SHIFT);
 
-		txq->sw_ring[TX_BD(pkt_prod, txq)] = m0;
+	tx_start_bd->nbd = rte_cpu_to_le_16(2);
 
-		tx_start_bd = &txq->tx_ring[TX_BD(bd_prod, txq)].start_bd;
-
-		tx_start_bd->addr =
-		    rte_cpu_to_le_64(rte_mbuf_data_dma_addr(m0));
-		tx_start_bd->nbytes = rte_cpu_to_le_16(m0->data_len);
-		tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD;
-		tx_start_bd->general_data =
-		    (1 << ETH_TX_START_BD_HDR_NBDS_SHIFT);
-
-		tx_start_bd->nbd = rte_cpu_to_le_16(2);
+	if (m0->ol_flags & PKT_TX_VLAN_PKT) {
+		tx_start_bd->vlan_or_ethertype =
+		    rte_cpu_to_le_16(m0->vlan_tci);
+		tx_start_bd->bd_flags.as_bitfield |=
+		    (X_ETH_OUTBAND_VLAN <<
+		     ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
+	} else {
+		if (IS_PF(sc))
+			tx_start_bd->vlan_or_ethertype =
+			    rte_cpu_to_le_16(pkt_prod);
+		else {
+			struct ether_hdr *eh =
+				rte_pktmbuf_mtod(m0, struct ether_hdr *);
 
-		if (m0->ol_flags & PKT_TX_VLAN_PKT) {
 			tx_start_bd->vlan_or_ethertype =
-			    rte_cpu_to_le_16(m0->vlan_tci);
-			tx_start_bd->bd_flags.as_bitfield |=
-			    (X_ETH_OUTBAND_VLAN <<
-			     ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
-		} else {
-			if (IS_PF(sc))
-				tx_start_bd->vlan_or_ethertype =
-				    rte_cpu_to_le_16(pkt_prod);
-			else {
-				struct ether_hdr *eh
-				    = rte_pktmbuf_mtod(m0, struct ether_hdr *);
-
-				tx_start_bd->vlan_or_ethertype
-				    = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
-			}
+			     rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
 		}
+	}
 
-		bd_prod = NEXT_TX_BD(bd_prod);
-		if (IS_VF(sc)) {
-			struct eth_tx_parse_bd_e2 *tx_parse_bd;
-			const struct ether_hdr *eh = rte_pktmbuf_mtod(m0, struct ether_hdr *);
-			uint8_t mac_type = UNICAST_ADDRESS;
-
-			tx_parse_bd =
-			    &txq->tx_ring[TX_BD(bd_prod, txq)].parse_bd_e2;
-			if (is_multicast_ether_addr(&eh->d_addr)) {
-				if (is_broadcast_ether_addr(&eh->d_addr))
-					mac_type = BROADCAST_ADDRESS;
-				else
-					mac_type = MULTICAST_ADDRESS;
-			}
-			tx_parse_bd->parsing_data =
-			    (mac_type << ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT);
-
-			rte_memcpy(&tx_parse_bd->data.mac_addr.dst_hi,
-				   &eh->d_addr.addr_bytes[0], 2);
-			rte_memcpy(&tx_parse_bd->data.mac_addr.dst_mid,
-				   &eh->d_addr.addr_bytes[2], 2);
-			rte_memcpy(&tx_parse_bd->data.mac_addr.dst_lo,
-				   &eh->d_addr.addr_bytes[4], 2);
-			rte_memcpy(&tx_parse_bd->data.mac_addr.src_hi,
-				   &eh->s_addr.addr_bytes[0], 2);
-			rte_memcpy(&tx_parse_bd->data.mac_addr.src_mid,
-				   &eh->s_addr.addr_bytes[2], 2);
-			rte_memcpy(&tx_parse_bd->data.mac_addr.src_lo,
-				   &eh->s_addr.addr_bytes[4], 2);
-
-			tx_parse_bd->data.mac_addr.dst_hi =
-			    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_hi);
-			tx_parse_bd->data.mac_addr.dst_mid =
-			    rte_cpu_to_be_16(tx_parse_bd->data.
-					     mac_addr.dst_mid);
-			tx_parse_bd->data.mac_addr.dst_lo =
-			    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_lo);
-			tx_parse_bd->data.mac_addr.src_hi =
-			    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_hi);
-			tx_parse_bd->data.mac_addr.src_mid =
-			    rte_cpu_to_be_16(tx_parse_bd->data.
-					     mac_addr.src_mid);
-			tx_parse_bd->data.mac_addr.src_lo =
-			    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_lo);
-
-			PMD_TX_LOG(DEBUG,
-				   "PBD dst %x %x %x src %x %x %x p_data %x",
-				   tx_parse_bd->data.mac_addr.dst_hi,
-				   tx_parse_bd->data.mac_addr.dst_mid,
-				   tx_parse_bd->data.mac_addr.dst_lo,
-				   tx_parse_bd->data.mac_addr.src_hi,
-				   tx_parse_bd->data.mac_addr.src_mid,
-				   tx_parse_bd->data.mac_addr.src_lo,
-				   tx_parse_bd->parsing_data);
-		}
+	bd_prod = NEXT_TX_BD(bd_prod);
+	if (IS_VF(sc)) {
+		struct eth_tx_parse_bd_e2 *tx_parse_bd;
+		const struct ether_hdr *eh =
+				rte_pktmbuf_mtod(m0, struct ether_hdr *);
+		uint8_t mac_type = UNICAST_ADDRESS;
+
+		tx_parse_bd =
+			&txq->tx_ring[TX_BD(bd_prod, txq)].parse_bd_e2;
+		if (is_multicast_ether_addr(&eh->d_addr)) {
+			if (is_broadcast_ether_addr(&eh->d_addr))
+				mac_type = BROADCAST_ADDRESS;
+			else
+				mac_type = MULTICAST_ADDRESS;
+		}
+		tx_parse_bd->parsing_data =
+			   (mac_type << ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT);
+
+		rte_memcpy(&tx_parse_bd->data.mac_addr.dst_hi,
+			   &eh->d_addr.addr_bytes[0], 2);
+		rte_memcpy(&tx_parse_bd->data.mac_addr.dst_mid,
+			   &eh->d_addr.addr_bytes[2], 2);
+		rte_memcpy(&tx_parse_bd->data.mac_addr.dst_lo,
+			   &eh->d_addr.addr_bytes[4], 2);
+		rte_memcpy(&tx_parse_bd->data.mac_addr.src_hi,
+			   &eh->s_addr.addr_bytes[0], 2);
+		rte_memcpy(&tx_parse_bd->data.mac_addr.src_mid,
+			   &eh->s_addr.addr_bytes[2], 2);
+		rte_memcpy(&tx_parse_bd->data.mac_addr.src_lo,
+			   &eh->s_addr.addr_bytes[4], 2);
+
+		tx_parse_bd->data.mac_addr.dst_hi =
+		    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_hi);
+		tx_parse_bd->data.mac_addr.dst_mid =
+		    rte_cpu_to_be_16(tx_parse_bd->data.
+				     mac_addr.dst_mid);
+		tx_parse_bd->data.mac_addr.dst_lo =
+		    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_lo);
+		tx_parse_bd->data.mac_addr.src_hi =
+		    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_hi);
+		tx_parse_bd->data.mac_addr.src_mid =
+		    rte_cpu_to_be_16(tx_parse_bd->data.
+				     mac_addr.src_mid);
+		tx_parse_bd->data.mac_addr.src_lo =
+		    rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_lo);
 
 		PMD_TX_LOG(DEBUG,
-			   "start bd: nbytes %d flags %x vlan %x\n",
-			   tx_start_bd->nbytes,
-			   tx_start_bd->bd_flags.as_bitfield,
-			   tx_start_bd->vlan_or_ethertype);
+			   "PBD dst %x %x %x src %x %x %x p_data %x",
+			   tx_parse_bd->data.mac_addr.dst_hi,
+			   tx_parse_bd->data.mac_addr.dst_mid,
+			   tx_parse_bd->data.mac_addr.dst_lo,
+			   tx_parse_bd->data.mac_addr.src_hi,
+			   tx_parse_bd->data.mac_addr.src_mid,
+			   tx_parse_bd->data.mac_addr.src_lo,
+			   tx_parse_bd->parsing_data);
+	}
 
-		bd_prod = NEXT_TX_BD(bd_prod);
-		pkt_prod++;
+	PMD_TX_LOG(DEBUG,
+		   "start bd: nbytes %d flags %x vlan %x\n",
+		   tx_start_bd->nbytes,
+		   tx_start_bd->bd_flags.as_bitfield,
+		   tx_start_bd->vlan_or_ethertype);
 
-		if (TX_IDX(bd_prod) < 2) {
-			nbds++;
-		}
-	}
+	bd_prod = NEXT_TX_BD(bd_prod);
+	pkt_prod++;
+
+	if (TX_IDX(bd_prod) < 2)
+		nbds++;
 
-	txq->nb_tx_avail -= m_pkts << 1;
+	txq->nb_tx_avail -= 1 << 1;
 	txq->tx_bd_tail = bd_prod;
 	txq->tx_pkt_tail = pkt_prod;
 
-	mb();
-	fp->tx_db.data.prod += (m_pkts << 1) + nbds;
-	DOORBELL(sc, txq->queue_id, fp->tx_db.raw);
-	mb();
-
-	return 0;
+	return nbds + 2;
 }
 
 static uint16_t bnx2x_cid_ilt_lines(struct bnx2x_softc *sc)
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index 135a6eb..b3a3866 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -167,6 +167,8 @@ struct bnx2x_device_type {
 #define TX_PAGE(x)              (((x) & ~USABLE_TX_BD_PER_PAGE) >> 8)
 #define TX_IDX(x)               ((x) & USABLE_TX_BD_PER_PAGE)
 
+#define BDS_PER_TX_PKT		(3)
+
 /*
  * Trigger pending transmits when the number of available BDs is greater
  * than 1/8 of the total number of usable BDs.
@@ -1864,7 +1866,7 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc);
 int bnx2x_alloc_ilt_mem(struct bnx2x_softc *sc);
 void bnx2x_free_ilt_mem(struct bnx2x_softc *sc);
 void bnx2x_dump_tx_chain(struct bnx2x_fastpath * fp, int bd_prod, int count);
-int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_pkts);
+uint32_t bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0);
 uint8_t bnx2x_txeof(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp);
 void bnx2x_print_adapter_info(struct bnx2x_softc *sc);
 int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp);
diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 752a5e8..8b047d4 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -222,40 +222,37 @@ bnx2x_xmit_pkts(void *p_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 	struct bnx2x_tx_queue *txq;
 	struct bnx2x_softc *sc;
 	struct bnx2x_fastpath *fp;
-	uint32_t burst, nb_tx;
-	struct rte_mbuf **m = tx_pkts;
-	int ret;
+	uint32_t ret;
+	uint16_t nb_tx_pkts;
+	uint16_t nb_pkt_sent = 0;
 
 	txq = p_txq;
 	sc = txq->sc;
 	fp = &sc->fp[txq->queue_id];
 
-	nb_tx = nb_pkts;
+	if ((unlikely((txq->nb_tx_desc - txq->nb_tx_avail) >
+					txq->tx_free_thresh)))
+		bnx2x_txeof(sc, fp);
 
-	do {
-		burst = RTE_MIN(nb_pkts, RTE_PMD_BNX2X_TX_MAX_BURST);
+	nb_tx_pkts = RTE_MIN(nb_pkts, txq->nb_tx_avail / BDS_PER_TX_PKT);
 
-		ret = bnx2x_tx_encap(txq, m, burst);
-		if (unlikely(ret)) {
-			PMD_TX_LOG(ERR, "tx_encap failed!");
-		}
-
-		bnx2x_update_fp_sb_idx(fp);
-
-		if ((txq->nb_tx_desc - txq->nb_tx_avail) > txq->tx_free_thresh) {
-			bnx2x_txeof(sc, fp);
-		}
-
-		if (unlikely(ret == -ENOMEM)) {
-			break;
-		}
+	if (unlikely(nb_tx_pkts == 0))
+		return 0;
 
-		m += burst;
-		nb_pkts -= burst;
+	while (nb_tx_pkts--) {
+		struct rte_mbuf *m = *tx_pkts++;
+		assert(m != NULL);
+		ret = bnx2x_tx_encap(txq, m);
+		fp->tx_db.data.prod += ret;
+		nb_pkt_sent++;
+	}
 
-	} while (nb_pkts);
+	bnx2x_update_fp_sb_idx(fp);
+	mb();
+	DOORBELL(sc, txq->queue_id, fp->tx_db.raw);
+	mb();
 
-	return nb_tx - nb_pkts;
+	return nb_pkt_sent;
 }
 
 int
-- 
1.7.10.3

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

* [PATCH v2 3/4] bnx2x: Enhance stats get routine
  2016-04-01  0:15 [PATCH v2 1/4] bnx2x: Update documentation Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 2/4] bnx2x: Fix Tx Performance Rasesh Mody
@ 2016-04-01  0:15 ` Rasesh Mody
  2016-04-01  8:17   ` Thomas Monjalon
  2016-04-01  0:15 ` [PATCH v2 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody
  2 siblings, 1 reply; 5+ messages in thread
From: Rasesh Mody @ 2016-04-01  0:15 UTC (permalink / raw)
  To: dev; +Cc: ameen.rahman, Rasesh Mody, Harish Patil

Enhance the stats_get() routine to display drop counters under the
control of a debug flag.
Fix RX stats.

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com>
---
 drivers/net/bnx2x/bnx2x_ethdev.c |   53 ++++++++++++++++++++++++++++++++++++++
 drivers/net/bnx2x/bnx2x_rxtx.c   |    2 ++
 2 files changed, 55 insertions(+)

diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
index 7e5be08..019dc66 100644
--- a/drivers/net/bnx2x/bnx2x_ethdev.c
+++ b/drivers/net/bnx2x/bnx2x_ethdev.c
@@ -276,6 +276,17 @@ static void
 bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
+	uint32_t brb_truncate_discard;
+	uint64_t brb_drops;
+	uint64_t brb_truncates;
+#ifdef RTE_LIBRTE_BNX2X_DEBUG
+	uint32_t mf_tag_discard;
+	uint32_t mac_filter_discard;
+	uint64_t rx_pause;
+	uint64_t tx_pause;
+	uint64_t rx_pfc;
+	uint64_t tx_pfc;
+#endif
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -316,6 +327,48 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	stats->rx_nombuf =
 		HILO_U64(sc->eth_stats.no_buff_discard_hi,
 				sc->eth_stats.no_buff_discard_lo);
+	brb_drops =
+		HILO_U64(sc->eth_stats.brb_drop_hi,
+			 sc->eth_stats.brb_drop_lo);
+
+	brb_truncates =
+		HILO_U64(sc->eth_stats.brb_truncate_hi,
+			 sc->eth_stats.brb_truncate_lo);
+
+	brb_truncate_discard = sc->eth_stats.brb_truncate_discard;
+
+	stats->imissed = brb_drops + brb_truncates +
+			 brb_truncate_discard + stats->rx_nombuf;
+
+#ifdef RTE_LIBRTE_BNX2X_DEBUG
+	mac_filter_discard = sc->eth_stats.mac_filter_discard;
+
+	mf_tag_discard = sc->eth_stats.mf_tag_discard;
+
+	tx_pause = HILO_U64(sc->eth_stats.pause_frames_sent_hi,
+			    sc->eth_stats.pause_frames_sent_lo);
+
+	rx_pause = HILO_U64(sc->eth_stats.pause_frames_received_hi,
+			    sc->eth_stats.pause_frames_received_lo);
+
+	tx_pfc = HILO_U64(sc->eth_stats.pfc_frames_sent_hi,
+			  sc->eth_stats.pfc_frames_sent_lo);
+
+	rx_pfc = HILO_U64(sc->eth_stats.pfc_frames_received_hi,
+			  sc->eth_stats.pfc_frames_received_lo);
+
+	PMD_DRV_LOG(DEBUG, "port=%u, nobuff=%"PRIu64", brb_drops=%"PRIu64""
+		"brb_truncates=%"PRIu64", brb_truncate_discard=%"PRIu32""
+		"mac_filter_discard=%"PRIu32", mf_tag_discard=%"PRIu32"",
+		dev->data->port_id, stats->rx_nombuf, brb_drops,
+		brb_truncates, brb_truncate_discard,
+		mac_filter_discard, mf_tag_discard);
+
+	PMD_DRV_LOG(DEBUG, "port=%u, rx_pause=%"PRIu64", tx_pause=%"PRIu64""
+		"rx_pfc=%"PRIu64", tx_pfc=%"PRIu64"",
+		dev->data->port_id, rx_pause, tx_pause,
+		rx_pfc, tx_pfc);
+#endif
 }
 
 static void
diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 8b047d4..60bd08b 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -405,6 +405,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 		new_mb = bnx2x_rxmbuf_alloc(rxq->mb_pool);
 		if (unlikely(!new_mb)) {
 			PMD_RX_LOG(ERR, "mbuf alloc fail fp[%02d]", fp->index);
+			rte_eth_devices[rxq->port_id].data->
+					rx_mbuf_alloc_failed++;
 			goto next_rx;
 		}
 
-- 
1.7.10.3

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

* [PATCH v2 4/4] bnx2x: Update PMD version to 1.0.1.1
  2016-04-01  0:15 [PATCH v2 1/4] bnx2x: Update documentation Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 2/4] bnx2x: Fix Tx Performance Rasesh Mody
  2016-04-01  0:15 ` [PATCH v2 3/4] bnx2x: Enhance stats get routine Rasesh Mody
@ 2016-04-01  0:15 ` Rasesh Mody
  2 siblings, 0 replies; 5+ messages in thread
From: Rasesh Mody @ 2016-04-01  0:15 UTC (permalink / raw)
  To: dev; +Cc: ameen.rahman, Rasesh Mody

Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com>
---
 drivers/net/bnx2x/bnx2x.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 149fdef..dcd21f8 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -32,18 +32,20 @@
 #define BNX2X_PMD_VER_PREFIX "BNX2X PMD"
 #define BNX2X_PMD_VERSION_MAJOR 1
 #define BNX2X_PMD_VERSION_MINOR 0
-#define BNX2X_PMD_VERSION_PATCH 0
+#define BNX2X_PMD_VERSION_REVISION 1
+#define BNX2X_PMD_VERSION_PATCH 1
 
 static inline const char *
 bnx2x_pmd_version(void)
 {
 	static char version[32];
 
-	snprintf(version, sizeof(version), "%s %s_%d.%d.%d",
+	snprintf(version, sizeof(version), "%s %s_%d.%d.%d.%d",
 			BNX2X_PMD_VER_PREFIX,
 			BNX2X_DRIVER_VERSION,
 			BNX2X_PMD_VERSION_MAJOR,
 			BNX2X_PMD_VERSION_MINOR,
+			BNX2X_PMD_VERSION_REVISION,
 			BNX2X_PMD_VERSION_PATCH);
 
 	return version;
-- 
1.7.10.3

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

* Re: [PATCH v2 3/4] bnx2x: Enhance stats get routine
  2016-04-01  0:15 ` [PATCH v2 3/4] bnx2x: Enhance stats get routine Rasesh Mody
@ 2016-04-01  8:17   ` Thomas Monjalon
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Monjalon @ 2016-04-01  8:17 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dev, ameen.rahman, Harish Patil

2016-03-31 17:15, Rasesh Mody:
> Enhance the stats_get() routine to display drop counters under the
> control of a debug flag.

Why printing the stats in stats_get?
These stats should be returned in xstats.

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

end of thread, other threads:[~2016-04-01  8:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-01  0:15 [PATCH v2 1/4] bnx2x: Update documentation Rasesh Mody
2016-04-01  0:15 ` [PATCH v2 2/4] bnx2x: Fix Tx Performance Rasesh Mody
2016-04-01  0:15 ` [PATCH v2 3/4] bnx2x: Enhance stats get routine Rasesh Mody
2016-04-01  8:17   ` Thomas Monjalon
2016-04-01  0:15 ` [PATCH v2 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody

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.