On Tue, Feb 8, 2022 at 9:58 PM Ajit Khaparde wrote: > > Currently the Tx and Rx ring count for representors is fixed. > It does not consider the number of rings created for the parent > function. And that can cause issues not only during initialization > but while running traffic. > Instead check the number of rings created for the parent function > while configuring the ring resources for representors. > > Fixes: 322bd6e70272 ("net/bnxt: add port representor infrastructure") > Cc: stable@dpdk.org > > Signed-off-by: Ajit Khaparde > Reviewed-by: Somnath Kotur > Reviewed-by: Kalesh AP Patch applied to dpdk-next-net-brcm. > --- > drivers/net/bnxt/bnxt.h | 2 +- > drivers/net/bnxt/bnxt_reps.c | 19 ++++++++++--------- > 2 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h > index 433f1c80be..0cbb58b2cf 100644 > --- a/drivers/net/bnxt/bnxt.h > +++ b/drivers/net/bnxt/bnxt.h > @@ -831,7 +831,7 @@ struct bnxt { > uint16_t max_tx_rings; > uint16_t max_rx_rings; > #define MAX_STINGRAY_RINGS 236U > -#define BNXT_MAX_VF_REP_RINGS 8 > +#define BNXT_MAX_VF_REP_RINGS 8U > > uint16_t max_nq_rings; > uint16_t max_l2_ctx; > diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c > index 5e140f0cdb..9ae8848382 100644 > --- a/drivers/net/bnxt/bnxt_reps.c > +++ b/drivers/net/bnxt/bnxt_reps.c > @@ -548,7 +548,8 @@ int bnxt_rep_dev_info_get_op(struct rte_eth_dev *eth_dev, > dev_info->max_mac_addrs = parent_bp->max_l2_ctx; > dev_info->max_hash_mac_addrs = 0; > > - max_rx_rings = BNXT_MAX_VF_REP_RINGS; > + max_rx_rings = RTE_MIN(parent_bp->rx_nr_rings, BNXT_MAX_VF_REP_RINGS); > + > /* For the sake of symmetry, max_rx_queues = max_tx_queues */ > dev_info->max_rx_queues = max_rx_rings; > dev_info->max_tx_queues = max_rx_rings; > @@ -629,10 +630,10 @@ int bnxt_rep_rx_queue_setup_op(struct rte_eth_dev *eth_dev, > struct rte_mbuf **buf_ring; > int rc = 0; > > - if (queue_idx >= BNXT_MAX_VF_REP_RINGS) { > + if (queue_idx >= rep_bp->rx_nr_rings) { > PMD_DRV_LOG(ERR, > "Cannot create Rx ring %d. %d rings available\n", > - queue_idx, BNXT_MAX_VF_REP_RINGS); > + queue_idx, rep_bp->rx_nr_rings); > return -EINVAL; > } > > @@ -729,10 +730,10 @@ int bnxt_rep_tx_queue_setup_op(struct rte_eth_dev *eth_dev, > struct bnxt_tx_queue *parent_txq, *txq; > struct bnxt_vf_rep_tx_queue *vfr_txq; > > - if (queue_idx >= BNXT_MAX_VF_REP_RINGS) { > + if (queue_idx >= rep_bp->rx_nr_rings) { > PMD_DRV_LOG(ERR, > "Cannot create Tx rings %d. %d rings available\n", > - queue_idx, BNXT_MAX_VF_REP_RINGS); > + queue_idx, rep_bp->rx_nr_rings); > return -EINVAL; > } > > @@ -805,10 +806,10 @@ int bnxt_rep_stats_get_op(struct rte_eth_dev *eth_dev, > struct rte_eth_stats *stats) > { > struct bnxt_representor *rep_bp = eth_dev->data->dev_private; > - int i; > + unsigned int i; > > memset(stats, 0, sizeof(*stats)); > - for (i = 0; i < BNXT_MAX_VF_REP_RINGS; i++) { > + for (i = 0; i < rep_bp->rx_nr_rings; i++) { > stats->obytes += rep_bp->tx_bytes[i]; > stats->opackets += rep_bp->tx_pkts[i]; > stats->ibytes += rep_bp->rx_bytes[i]; > @@ -828,9 +829,9 @@ int bnxt_rep_stats_get_op(struct rte_eth_dev *eth_dev, > int bnxt_rep_stats_reset_op(struct rte_eth_dev *eth_dev) > { > struct bnxt_representor *rep_bp = eth_dev->data->dev_private; > - int i; > + unsigned int i; > > - for (i = 0; i < BNXT_MAX_VF_REP_RINGS; i++) { > + for (i = 0; i < rep_bp->rx_nr_rings; i++) { > rep_bp->tx_pkts[i] = 0; > rep_bp->tx_bytes[i] = 0; > rep_bp->rx_pkts[i] = 0; > -- > 2.32.0 (Apple Git-132) >