[PATCH] net/bnxt: add support for queue size of 16384
Mohammad Shuab Siddique
mohammad-shuab.siddique at broadcom.com
Fri Sep 18 05:28:25 CEST 2026
From: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
The driver only supported queue sizes up to 4096 for Tx and 8192 for
Rx. Raise both to 16384. The completion ring for a Rx ring is sized
at 2x (4x with aggregation) the Rx ring size, so at 16384 it can
reach 131072, above uint16_t range - widen the ring index/counter
variables touched by that path to uint32_t.
Signed-off-by: Keegan Freyhof <keegan.freyhof at broadcom.com>
Signed-off-by: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
---
drivers/net/bnxt/bnxt.h | 8 +++---
drivers/net/bnxt/bnxt_ring.h | 6 ++--
drivers/net/bnxt/bnxt_rxq.c | 4 +--
drivers/net/bnxt/bnxt_rxr.c | 40 +++++++++++++--------------
drivers/net/bnxt/bnxt_rxr.h | 10 +++----
drivers/net/bnxt/bnxt_rxtx_vec_avx2.c | 14 +++++-----
drivers/net/bnxt/bnxt_rxtx_vec_neon.c | 4 +--
drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 10 +++----
8 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 336de75da0..d2c3e0ffac 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -91,8 +91,8 @@
/* Minimum spec version that supports AUTONEG_PAUSE bit in auto_pause field */
#define HWRM_SPEC_CODE_AUTONEG_PAUSE 0x10201
-#define BNXT_MAX_MTU 9574
-#define BNXT_NUM_VLANS 2
+#define BNXT_MAX_MTU 9574UL
+#define BNXT_NUM_VLANS 2UL
#define BNXT_MAX_PKT_LEN (BNXT_MAX_MTU + RTE_ETHER_HDR_LEN +\
RTE_ETHER_CRC_LEN +\
(BNXT_NUM_VLANS * RTE_VLAN_HLEN))
@@ -105,8 +105,8 @@
#define BNXT_VF_RSV_NUM_VNIC 1
#define BNXT_MAX_LED 4
#define BNXT_MIN_RING_DESC 16
-#define BNXT_MAX_TX_RING_DESC 4096
-#define BNXT_MAX_RX_RING_DESC 8192
+#define BNXT_MAX_TX_RING_DESC 16384
+#define BNXT_MAX_RX_RING_DESC 16384
#define BNXT_DB_SIZE 0x80
#define TPA_MAX_AGGS 64
diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h
index 496c3e111f..eaa4ec66c1 100644
--- a/drivers/net/bnxt/bnxt_ring.h
+++ b/drivers/net/bnxt/bnxt_ring.h
@@ -32,9 +32,9 @@
#define AGG_RING_MULTIPLIER 2
/* These assume 4k pages */
-#define MAX_RX_DESC_CNT (8 * 1024)
-#define MAX_TX_DESC_CNT (4 * 1024)
-#define MAX_CP_DESC_CNT (16 * 1024)
+#define MAX_RX_DESC_CNT (16 * 1024)
+#define MAX_TX_DESC_CNT (16 * 1024)
+#define MAX_CP_DESC_CNT (32 * 1024)
#define INVALID_HW_RING_ID ((uint16_t)-1)
#define INVALID_STATS_CTX_ID ((uint16_t)-1)
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index 023cb0e174..1dae97a695 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -210,7 +210,7 @@ void bnxt_rx_queue_release_mbufs(struct bnxt_rx_queue *rxq)
{
struct rte_mbuf **sw_ring;
struct bnxt_tpa_info *tpa_info;
- uint16_t i;
+ uint32_t i;
if (!rxq || !rxq->rx_ring)
return;
@@ -259,7 +259,7 @@ void bnxt_rx_queue_release_mbufs(struct bnxt_rx_queue *rxq)
/* Free up mbufs in TPA */
tpa_info = rxq->rx_ring->tpa_info;
if (tpa_info) {
- int max_aggs = BNXT_TPA_MAX_AGGS(rxq->bp);
+ uint32_t max_aggs = BNXT_TPA_MAX_AGGS(rxq->bp);
for (i = 0; i < max_aggs; i++) {
if (tpa_info[i].mbuf) {
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index 0fab4ddf78..b260ba9bef 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -37,9 +37,9 @@ static inline struct rte_mbuf *__bnxt_alloc_rx_data(struct rte_mempool *mb)
static inline int bnxt_alloc_rx_data(struct bnxt_rx_queue *rxq,
struct bnxt_rx_ring_info *rxr,
- uint16_t raw_prod)
+ uint32_t raw_prod)
{
- uint16_t prod = RING_IDX(rxr->rx_ring_struct, raw_prod);
+ uint32_t prod = RING_IDX(rxr->rx_ring_struct, raw_prod);
struct rx_prod_pkt_bd *rxbd;
struct rte_mbuf **rx_buf;
struct rte_mbuf *mbuf;
@@ -65,9 +65,9 @@ static inline int bnxt_alloc_rx_data(struct bnxt_rx_queue *rxq,
static inline int bnxt_alloc_ag_data(struct bnxt_rx_queue *rxq,
struct bnxt_rx_ring_info *rxr,
- uint16_t raw_prod)
+ uint32_t raw_prod)
{
- uint16_t prod = RING_IDX(rxr->ag_ring_struct, raw_prod);
+ uint32_t prod = RING_IDX(rxr->ag_ring_struct, raw_prod);
struct rx_prod_pkt_bd *rxbd;
struct rte_mbuf **rx_buf;
struct rte_mbuf *mbuf;
@@ -104,7 +104,7 @@ static inline int bnxt_alloc_ag_data(struct bnxt_rx_queue *rxq,
static inline void bnxt_reuse_rx_mbuf(struct bnxt_rx_ring_info *rxr,
struct rte_mbuf *mbuf)
{
- uint16_t prod, raw_prod = RING_NEXT(rxr->rx_raw_prod);
+ uint32_t prod, raw_prod = RING_NEXT(rxr->rx_raw_prod);
struct rte_mbuf **prod_rx_buf;
struct rx_prod_pkt_bd *prod_bd;
@@ -125,7 +125,7 @@ static inline void bnxt_reuse_rx_mbuf(struct bnxt_rx_ring_info *rxr,
static inline
struct rte_mbuf *bnxt_consume_rx_buf(struct bnxt_rx_ring_info *rxr,
- uint16_t cons)
+ uint32_t cons)
{
struct rte_mbuf **cons_rx_buf;
struct rte_mbuf *mbuf;
@@ -297,7 +297,7 @@ static void bnxt_tpa_start(struct bnxt_rx_queue *rxq,
static int bnxt_agg_bufs_valid(struct bnxt_cp_ring_info *cpr,
uint8_t agg_bufs, uint32_t raw_cp_cons)
{
- uint16_t last_cp_cons;
+ uint32_t last_cp_cons;
struct rx_pkt_cmpl *agg_cmpl;
raw_cp_cons = ADV_RAW_CMP(raw_cp_cons, agg_bufs);
@@ -311,8 +311,8 @@ static int bnxt_agg_bufs_valid(struct bnxt_cp_ring_info *cpr,
static int bnxt_prod_ag_mbuf(struct bnxt_rx_queue *rxq)
{
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t raw_next = RING_NEXT(rxr->ag_raw_prod);
- uint16_t bmap_next = RING_IDX(rxr->ag_ring_struct, raw_next);
+ uint32_t raw_next = RING_NEXT(rxr->ag_raw_prod);
+ uint32_t bmap_next = RING_IDX(rxr->ag_ring_struct, raw_next);
/* TODO batch allocation for better performance */
while (rte_bitmap_get(rxr->ag_bitmap, bmap_next)) {
@@ -334,7 +334,7 @@ static int bnxt_rx_pages(struct bnxt_rx_queue *rxq,
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
int i;
- uint16_t cp_cons, ag_cons;
+ uint32_t cp_cons, ag_cons;
struct rx_pkt_cmpl *rxcmp;
struct rte_mbuf *last = mbuf;
bool is_p5_tpa = tpa_info && BNXT_CHIP_P5_P7(rxq->bp);
@@ -1003,7 +1003,7 @@ static int bnxt_rx_pages_crx(struct bnxt_rx_queue *rxq, struct rte_mbuf *mbuf,
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
int i;
- uint16_t cp_cons, ag_cons;
+ uint32_t cp_cons, ag_cons;
struct rx_pkt_compress_cmpl *rxcmp;
struct rte_mbuf *last = mbuf;
@@ -1058,7 +1058,7 @@ static int bnxt_crx_pkt(struct rte_mbuf **rx_pkt,
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
uint32_t tmp_raw_cons = *raw_cons;
- uint16_t cons, raw_prod;
+ uint32_t cons, raw_prod;
struct rte_mbuf *mbuf;
int rc = 0;
uint8_t agg_buf = 0;
@@ -1119,12 +1119,12 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,
struct rx_pkt_cmpl *rxcmp;
struct rx_pkt_cmpl_hi *rxcmp1;
uint32_t tmp_raw_cons = *raw_cons;
- uint16_t cons, raw_prod, cp_cons =
+ uint32_t cons, raw_prod, cp_cons =
RING_CMP(cpr->cp_ring_struct, tmp_raw_cons);
struct rte_mbuf *mbuf;
int rc = 0;
uint8_t agg_buf = 0;
- uint16_t cmp_type;
+ uint32_t cmp_type;
uint32_t vfr_flag = 0, mark_id = 0;
struct bnxt *bp = rxq->bp;
@@ -1343,7 +1343,7 @@ static void bnxt_reattempt_buffer_alloc(struct bnxt_rx_queue *rxq)
{
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
struct bnxt_ring *ring;
- uint16_t raw_prod;
+ uint32_t raw_prod;
uint32_t cnt;
/* Assume alloc passes. On failure,
@@ -1363,7 +1363,7 @@ static void bnxt_reattempt_buffer_alloc(struct bnxt_rx_queue *rxq)
ring = rxr->rx_ring_struct;
for (cnt = 0; cnt < ring->ring_size; cnt++) {
struct rte_mbuf **rx_buf;
- uint16_t ndx;
+ uint32_t ndx;
ndx = RING_IDX(ring, raw_prod + cnt);
rx_buf = &rxr->rx_buf_ring[ndx];
@@ -1387,8 +1387,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
struct bnxt_rx_queue *rxq = rx_queue;
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t rx_raw_prod = rxr->rx_raw_prod;
- uint16_t ag_raw_prod = rxr->ag_raw_prod;
+ uint32_t rx_raw_prod = rxr->rx_raw_prod;
+ uint32_t ag_raw_prod = rxr->ag_raw_prod;
uint32_t raw_cons = cpr->cp_raw_cons;
uint32_t cons;
int nb_rx_pkts = 0;
@@ -1627,7 +1627,7 @@ int bnxt_init_rx_ring_struct(struct bnxt_rx_queue *rxq, unsigned int socket_id)
}
static void bnxt_init_rxbds(struct bnxt_ring *ring, uint32_t type,
- uint16_t len)
+ uint32_t len)
{
uint32_t j;
struct rx_prod_pkt_bd *rx_bd_ring = (struct rx_prod_pkt_bd *)ring->bd;
@@ -1647,7 +1647,7 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)
struct bnxt_ring *ring;
uint32_t raw_prod, type;
unsigned int i;
- uint16_t size;
+ uint32_t size;
/* Initialize packet type table. */
bnxt_init_ptype_table();
diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h
index c971233dc3..c82f44f041 100644
--- a/drivers/net/bnxt/bnxt_rxr.h
+++ b/drivers/net/bnxt/bnxt_rxr.h
@@ -114,11 +114,11 @@ struct bnxt_tpa_info {
};
struct bnxt_rx_ring_info {
- uint16_t rx_raw_prod;
- uint16_t ag_raw_prod;
- uint16_t ag_cons; /* Needed with compressed CQE */
- uint16_t rx_cons; /* Needed for representor */
- uint16_t rx_next_cons;
+ uint32_t rx_raw_prod;
+ uint32_t ag_raw_prod;
+ uint32_t ag_cons; /* Needed with compressed CQE */
+ uint32_t rx_cons; /* Needed for representor */
+ uint32_t rx_next_cons;
struct bnxt_db_info rx_db;
struct bnxt_db_info ag_db;
diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_avx2.c b/drivers/net/bnxt/bnxt_rxtx_vec_avx2.c
index 50b3602839..9eca5a519f 100644
--- a/drivers/net/bnxt/bnxt_rxtx_vec_avx2.c
+++ b/drivers/net/bnxt/bnxt_rxtx_vec_avx2.c
@@ -27,8 +27,8 @@ recv_burst_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
_mm256_set_epi64x(0, 0, 0, rxq->mbuf_initializer);
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0ULL;
const __m256i info3_v_mask = _mm256_set1_epi32(CMPL_BASE_V);
@@ -393,8 +393,8 @@ crx_burst_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
_mm256_set_epi64x(0, 0, 0, rxq->mbuf_initializer);
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0ULL;
const __m256i info3_v_mask = _mm256_set1_epi32(CMPL_BASE_V);
@@ -891,7 +891,7 @@ bnxt_xmit_pkts_vec_avx2(void *tx_queue, struct rte_mbuf **tx_pkts,
int nb_sent = 0;
struct bnxt_tx_queue *txq = tx_queue;
struct bnxt_tx_ring_info *txr = txq->tx_ring;
- uint16_t ring_size = txr->tx_ring_struct->ring_size;
+ uint32_t ring_size = txr->tx_ring_struct->ring_size;
/* Tx queue was stopped; wait for it to be restarted */
if (unlikely(!txq->tx_started)) {
@@ -942,8 +942,8 @@ recv_burst_vec_avx2_v3(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pk
_mm256_set_epi64x(0, 0, 0, rxq->mbuf_initializer);
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0ULL;
uint32_t raw_cons = cpr->cp_raw_cons;
diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c
index 03f39280e5..f015caa018 100644
--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c
+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c
@@ -164,8 +164,8 @@ recv_burst_vec_neon(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
struct bnxt_rx_queue *rxq = rx_queue;
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0UL;
const uint32x4_t info3_v_mask = vdupq_n_u32(CMPL_BASE_V);
diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
index 7d455b6f56..b03affb9ec 100644
--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
@@ -253,8 +253,8 @@ recv_burst_vec_sse(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
const __m128i mbuf_init = _mm_set_epi64x(0, rxq->mbuf_initializer);
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0ULL;
const __m128i info3_v_mask = _mm_set1_epi32(CMPL_BASE_V);
@@ -393,8 +393,8 @@ crx_burst_vec_sse(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
const __m128i mbuf_init = _mm_set_epi64x(0, rxq->mbuf_initializer);
struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
- uint16_t cp_ring_size = cpr->cp_ring_struct->ring_size;
- uint16_t rx_ring_size = rxr->rx_ring_struct->ring_size;
+ uint32_t cp_ring_size = cpr->cp_ring_struct->ring_size;
+ uint32_t rx_ring_size = rxr->rx_ring_struct->ring_size;
struct cmpl_base *cp_desc_ring = cpr->cp_desc_ring;
uint64_t valid, desc_valid_mask = ~0ULL;
const __m128i info3_v_mask = _mm_set1_epi32(CMPL_BASE_V);
@@ -677,7 +677,7 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
int nb_sent = 0;
struct bnxt_tx_queue *txq = tx_queue;
struct bnxt_tx_ring_info *txr = txq->tx_ring;
- uint16_t ring_size = txr->tx_ring_struct->ring_size;
+ uint32_t ring_size = txr->tx_ring_struct->ring_size;
/* Tx queue was stopped; wait for it to be restarted */
if (unlikely(!txq->tx_started)) {
--
2.47.3
More information about the dev
mailing list