From patchwork Wed Aug 18 05:39:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 97018 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 17188A0547; Wed, 18 Aug 2021 07:39:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D73AA4069E; Wed, 18 Aug 2021 07:39:13 +0200 (CEST) Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by mails.dpdk.org (Postfix) with ESMTP id 45B0D40042 for ; Wed, 18 Aug 2021 07:39:12 +0200 (CEST) Received: by mail-pj1-f50.google.com with SMTP id w13-20020a17090aea0db029017897a5f7bcso1555486pjy.5 for ; Tue, 17 Aug 2021 22:39:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:mime-version; bh=vFk7pVfJjN5tVPMp5rVxkwUct0q6Jow0gX8hXN+0t7g=; b=XJQoLVeyuQbH6InEksDi3sSQ9DmkK/JdLZzBawsaDS3Wu3EgaS7/FW57g7xlpfJ48Z dPZ/a7sTy1sOxudQp5JbIBXkV46/m0PL3sV1fO+SDCWgO7bnTIFNwahQ/YvhYMdne5iG L0tAChWf4JF34TJ0fOdLD3EmF++nDYXF+eX+U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version; bh=vFk7pVfJjN5tVPMp5rVxkwUct0q6Jow0gX8hXN+0t7g=; b=fNGhvljKAeJMRbtJtrdGyG204zvdvBNxWSkBHU1ttcMrbh2frv7/dFJBvYqn5B3kS2 AW9J5Bwpwv70ERc+gI4ysxrt5o4lVOIFnnNgUS9s6Y/KCqor2ls2imeLsa5ADTrJ/4yB /iJH7zdce2uxdQbxCvBYS7wP7dEeRT0DA8anvWRDYmAtrqLejUAeNewBgmvZTmav4W74 /8US4fiBeAI6FaJFgqq4zACbnT2y70tqLQ7VOdExjcM/I+AMlRCIpV6FsmowZihZ9ilI 5aFej3lSFEr+FM6RGyQCwVz9J86Ed63nK5SZzn/LChnxDlNNUhygewzUAAwAvCud3SRt 7qkg== X-Gm-Message-State: AOAM53360NfzNAaIDIT+XynyXnuUvVkD5j0Dh1YiV57Naw7P4ultWX5D CyrrM3zGm36LpLmSHjsPCsaMPOWFVMhyNJox2i32nyHhvtPK2Skozg3JLI5uda3GL+D3NWS/Ype VTdLEmTQBNrUN8SgqQUE9/J8JymuA5XlSPr1qE40SlQlPli27Do1FitgcEHtuc1g= X-Google-Smtp-Source: ABdhPJzLlIQ0CjbITh1gtVoFXPOCx4IwHExFS8N0OFQVFAvFViQ8aSv8N3QD8CGdbT29nWraiAZ2tw== X-Received: by 2002:a17:90a:ce0a:: with SMTP id f10mr7552726pju.71.1629265151021; Tue, 17 Aug 2021 22:39:11 -0700 (PDT) Received: from localhost.localdomain ([136.52.99.246]) by smtp.gmail.com with ESMTPSA id c17sm3715990pjq.16.2021.08.17.22.39.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Aug 2021 22:39:10 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: stable@dpdk.org, Somnath Kotur Date: Tue, 17 Aug 2021 22:39:02 -0700 Message-Id: <20210818053902.71231-1-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH] net/bnxt: update ring group after ring stop start 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 Sender: "dev" A Rx ring stop start sequence may result in the FW returning a different set of Rx ring and AGG ring IDs. If the ring group is not updated with the new IDs, the HW sees the host driver using incorrect BD types for the Rx ring and AGG ring. This can cause the chip to go into a bad state or encounter RE_flush issue or leak MBUFs in the HW. Fix this by issuing a bnxt_hwrm_ring_grp_free() and an bnxt_hwrm_ring_grp_alloc() to refresh the ring group information. Fixes: 9b63c6fd70e3 ("net/bnxt: support Rx/Tx queue start/stop") Cc: stable@dpdk.org Signed-off-by: Ajit Khaparde Reviewed-by: Somnath Kotur --- drivers/net/bnxt/bnxt_hwrm.c | 3 +++ drivers/net/bnxt/bnxt_ring.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 73deb41f81..eb9de45cb9 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -2717,6 +2717,9 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index) struct bnxt_ring *ring = rxr->rx_ring_struct; struct bnxt_cp_ring_info *cpr = rxq->cp_ring; + if (BNXT_HAS_RING_GRPS(bp)) + bnxt_hwrm_ring_grp_free(bp, queue_index); + bnxt_hwrm_ring_free(bp, ring, HWRM_RING_FREE_INPUT_RING_TYPE_RX, cpr->cp_ring_struct->fw_ring_id); diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c index b05c470766..957b175f1b 100644 --- a/drivers/net/bnxt/bnxt_ring.c +++ b/drivers/net/bnxt/bnxt_ring.c @@ -631,6 +631,12 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index) if (rc) goto err_out; + if (BNXT_HAS_RING_GRPS(bp)) { + rc = bnxt_hwrm_ring_grp_alloc(bp, queue_index); + if (rc) + goto err_out; + } + if (rxq->rx_started) { if (bnxt_init_one_rx_ring(rxq)) { PMD_DRV_LOG(ERR, "bnxt_init_one_rx_ring failed!\n");