From patchwork Wed Feb 9 17:42:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 107143 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6628BA034E; Wed, 9 Feb 2022 18:42:26 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DD86141144; Wed, 9 Feb 2022 18:42:25 +0100 (CET) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by mails.dpdk.org (Postfix) with ESMTP id 3AA0240140 for ; Wed, 9 Feb 2022 18:42:24 +0100 (CET) Received: by mail-pj1-f48.google.com with SMTP id d9-20020a17090a498900b001b8bb1d00e7so2912782pjh.3 for ; Wed, 09 Feb 2022 09:42:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=pidMf0wp0NMIIKH2cny10Vpk+rxNSiDy5FkNAIEVXw8=; b=A8u9rm6CkuBS7Q/SYFy6ZLwKPRZQ11sJ5GLXYQaaMLq7K4psyb+9NZJCrfrdB1Esc0 1/6jr+HugsuRKP/Cc4ek4NP1wI1McWbTmn0MMGgTIjnQh599ZQvoMO/zPKA5/OLxzILM DB3YEdKwk8RBcHBLl8dSQG3mk/O1J95vLZUE4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version; bh=pidMf0wp0NMIIKH2cny10Vpk+rxNSiDy5FkNAIEVXw8=; b=Accjkegt6MFGgYr+rWt9A7QTdgJ3uSrBADbOUJed6GVIKt/SXPoFPiwMB3QDc4ORAl 1kZw3dl+YKNYpfIiCfy1KEXX9MTedaLXwGRGWCUHiaEa0Pnw5fVsTo9Bw1QJ3f0+FbzC OGeMb6frKCf+Nc3Zz4IUi2kDdv6Fte+wo+CGVaFpQSqQgrc+mljwgbUKuFxBCLN3Dius AV7swVPJX8/Aw4drktS1wT45lMTFjkWBcGYvX1SM9BZJ8XtSQ7OrWcdFMaWVKtauHrVr xPO8dNfCBRG5Bpb4ABHvLJBght++36K4AdTrNBy/yyHpBC86KSgUp0QKovk+eMOJKFXm iDSQ== X-Gm-Message-State: AOAM5337ScEK0maNp4+X2GD1nEPWlE2/OcQL9Cjw2ne6jNb/dLiNCRTf OAtYSooKVwLVCzEUWNh5LCn1bHT0hWVMKr76QeVKC6k0SwGrZew/EXvwV9zNHr2sjWhg40Wc3Nr ISrccOESFoS0Ns99tJj0SLmfOQl4O/z8tk+O2j4Ht8s/DO9KPlXEdwGKfrVZc3T4= X-Google-Smtp-Source: ABdhPJyeH6CmLrQr5UnOOWciNQyHExNIw/o/p2npRZWR7Gb0oa01BcCB4cvHhdZGAuDXU825Mh9fFA== X-Received: by 2002:a17:90b:157:: with SMTP id em23mr3692112pjb.239.1644428543045; Wed, 09 Feb 2022 09:42:23 -0800 (PST) Received: from localhost.localdomain ([136.52.99.246]) by smtp.gmail.com with ESMTPSA id nu15sm7140532pjb.5.2022.02.09.09.42.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Feb 2022 09:42:22 -0800 (PST) From: Ajit Khaparde To: dev@dpdk.org Cc: stable@dpdk.org, Somnath Kotur , Kalesh AP Subject: [PATCH v2] net/bnxt: fix ring calculation for representors Date: Wed, 9 Feb 2022 09:42:19 -0800 Message-Id: <20220209174219.35650-1-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 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. In some cases VF rep ring init may happen before the parent function's rings have been setup. And this can cause representor ring count to be configured as 0. In such cases, initialize the VF representor ring count to 8. 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 --- drivers/net/bnxt/bnxt.h | 2 +- drivers/net/bnxt/bnxt_reps.c | 21 ++++++++++++--------- 2 files changed, 13 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..e773932681 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -548,7 +548,10 @@ 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 = parent_bp->rx_nr_rings ? + RTE_MIN(parent_bp->rx_nr_rings, BNXT_MAX_VF_REP_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 +632,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 +732,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 +808,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 +831,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;