From patchwork Mon Nov 4 20:27:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Richardson X-Patchwork-Id: 62392 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id ED103A0352; Mon, 4 Nov 2019 21:28:02 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6F8F731FC; Mon, 4 Nov 2019 21:28:00 +0100 (CET) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by dpdk.org (Postfix) with ESMTP id 4D18F2BF5 for ; Mon, 4 Nov 2019 21:27:59 +0100 (CET) Received: by mail-wr1-f67.google.com with SMTP id v9so18671040wrq.5 for ; Mon, 04 Nov 2019 12:27:59 -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; bh=zFP0v8mf/0QH/2zjA9gz5Zi/WHZAIjVM3iqixKP/Zus=; b=USTPlToYl3kYax0cG5+UlaGl6Fkk51wwtPL3Vl3bzuiqoLaQevvSVBDxtfb/fg2iBl ivGioxvyZrKr3L3SK3SDc8xfai7sa+x5/XjdszOoabYGm2RB0Mix26QzSlP7C56NpK0f ArHCkoW+GdJnkafYuCqQLzR7rxrF6eX5u7+W0= 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:in-reply-to :references; bh=zFP0v8mf/0QH/2zjA9gz5Zi/WHZAIjVM3iqixKP/Zus=; b=Q0Z9YMYAkAMpb6ZNKJgzgRE6xDGGTBfTemGDmK3UcOuPYEqyvfbnvCe3KZDiPuylsc s/nsgzzMn2PvgN0s8VkWT3OazlUfnLWyg40zVTSSYNu+A326T3xigl08gfaLbccOsVQp KXX6+Qxa9YrmVSR2ZRaInSYk+2Tznt4ORmO4Uw3rsTZVKlPo7/ZZeKiV+rRHvbFskM6U nOYOTZ+2VV81jl+hhDSOjrzyA9H8HG69y/SmFhCqw0FY09gA5hZLDd/dazUDv3dZc4BM xTDq9IxMwc/TvxrWHhOfAPwirDGRPqlb9JtGH/eT3/xBWoDmEJWsV8k4m9uy2wUKzFqN CEXA== X-Gm-Message-State: APjAAAVaeolxq11oqDXF9r8FrG4Agwf+Io03H66duTv9OPYXn3nI0zay zi5J9LpKvgHPX+ce/BSIihxhQT9NgYj0EPZCZNOaXiZLmMOEBTRwbmQdXjrizzKPHTNQ6HZPZwF lCyoQFhx4jS2rRmSIi34Fp4AwEhac73z57ejhRJV4+FFRR/pQFezteMD59iLTfrvL X-Google-Smtp-Source: APXvYqxCBSCwiFB307gOc7Po5P7IujQv3brYb4Vph8lweWfAx+wwjyHtp0ki6DE+mFSUaOrvpxZXCQ== X-Received: by 2002:adf:f489:: with SMTP id l9mr21196383wro.337.1572899278777; Mon, 04 Nov 2019 12:27:58 -0800 (PST) Received: from lrichardson-VirtualBox.dhcp.broadcom.net ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id i3sm17995365wrw.69.2019.11.04.12.27.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 12:27:58 -0800 (PST) From: Lance Richardson To: dev@dpdk.org Cc: ajit.khaparde@broadcom.com, ferruh.yigit@intel.com, Lance Richardson Date: Mon, 4 Nov 2019 15:27:44 -0500 Message-Id: <20191104202747.12897-2-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191104202747.12897-1-lance.richardson@broadcom.com> References: <20191104202747.12897-1-lance.richardson@broadcom.com> Subject: [dpdk-dev] [PATCH 1/4] net/bnxt: fix RSS table update for start/stop rxq X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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 previous commit made updating of the RSS table when a receive queue is stopped/started conditional on vnic->rx_queue_cnt being nonzero. This count is only nonzero for dynamically created VNICs, so the RSS table was not being updated in the normal path. Fix by restoring the original logic. Also ensure that vnic->rx_queue_cnt is initialized to zero when reinitializing the VNIC array. Fixes: 36024b2e7fe5 ("net/bnxt: allow dynamic creation of VNIC") Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_rxq.c | 6 ++---- drivers/net/bnxt/bnxt_vnic.c | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index 6420281d3..ab889c10e 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -466,8 +466,7 @@ int bnxt_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) } PMD_DRV_LOG(DEBUG, "Rx Queue Count %d\n", vnic->rx_queue_cnt); - if (vnic->rx_queue_cnt > 1) - rc = bnxt_vnic_rss_configure(bp, vnic); + rc = bnxt_vnic_rss_configure(bp, vnic); } if (rc == 0) @@ -522,8 +521,7 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) vnic->fw_grp_ids[rx_queue_id] = INVALID_HW_RING_ID; PMD_DRV_LOG(DEBUG, "Rx Queue Count %d\n", vnic->rx_queue_cnt); - if (vnic->rx_queue_cnt > 1) - rc = bnxt_vnic_rss_configure(bp, vnic); + rc = bnxt_vnic_rss_configure(bp, vnic); } if (rc == 0) diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c index 412a53dc0..52a4badfc 100644 --- a/drivers/net/bnxt/bnxt_vnic.c +++ b/drivers/net/bnxt/bnxt_vnic.c @@ -51,6 +51,7 @@ static void bnxt_init_vnics(struct bnxt *bp) vnic->lb_rule = (uint16_t)HWRM_NA_SIGNATURE; vnic->hash_mode = HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT; + vnic->rx_queue_cnt = 0; STAILQ_INIT(&vnic->filter); STAILQ_INIT(&vnic->flow_list); From patchwork Mon Nov 4 20:27:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Richardson X-Patchwork-Id: 62393 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0ABEFA0352; Mon, 4 Nov 2019 21:28:12 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 89FAB3576; Mon, 4 Nov 2019 21:28:06 +0100 (CET) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id D8D23A69 for ; Mon, 4 Nov 2019 21:28:04 +0100 (CET) Received: by mail-wr1-f68.google.com with SMTP id v9so18671282wrq.5 for ; Mon, 04 Nov 2019 12:28:04 -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; bh=M2nRTntGiu4TTthuOQ1BJ2zi3KXvs6/yIXcp//uqdaA=; b=Nh7X0Ipy3SB5bdjFOFvU2/rMXF3SBmT3aLpXU8Vya1G0Y54RE+2Tlzh2FVlvLLrFId lGdMicvYQ5VuTiZ71JL+ucN1/dWJU3Ti2HjvU3KZUwYcAqBFe9OxUxiJR2dX+XciYNSS BwNvLQFgPZS6PHYhTWc4p+1HXcwT6xSDXAsIg= 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:in-reply-to :references; bh=M2nRTntGiu4TTthuOQ1BJ2zi3KXvs6/yIXcp//uqdaA=; b=QcO40bMl2gDxpeLOYtnQhsBPlJrka54tIH3Y3/Etly5k3ser4LXXmFXdiL85yGDfQk CkRZkiddg/ruGwsYP2a30bV7aYDPXNxcEAKTfdQ4OEdCebVONc2p34bnw57/QhhF3yfT KlfiLaT9D+OkEGkHkOgFZsSS5i3rYPIIZF2Gjp1oJr2kny5qa7Dbm08PMswxkt31Wld5 LgELqUeOrnu11n2W9NImM/aUL8g+XsGz1BQ5bzimPf6wG0RVAyMLNSxP9YV0z8TVcahr kRXrRbSxo2N6BRmqzPotR2pHxX/19zU91pXjSGXBc05dtaOlg8hJod2mUdrg+yG0Di/l zHkg== X-Gm-Message-State: APjAAAX7GCHgJ1GxxHfQrDHmEQ0TC4PqgdhAE1RftL7dzMZFkunio9SG U/x8PJNyVuu7QXJ4HsmzvDbGc8W7d0QSZaaFek66AV5KzWMrVlndo8+jGkWWvRs26Zy72v8zgg0 QiJLg1wFTCSgMmXX4mR0WTU+vdjq4saHqOG5NYXjXV8uooqyBsCZgF0ZW7CNIm0Re X-Google-Smtp-Source: APXvYqwXqpADjvC0fMeioXH4ji2j6FCOBWTTtbWBMiiUCFc8TvnE3eb+UBG/W8WanP/YVxbVfRIf5Q== X-Received: by 2002:a05:6000:12c7:: with SMTP id l7mr7594068wrx.128.1572899284199; Mon, 04 Nov 2019 12:28:04 -0800 (PST) Received: from lrichardson-VirtualBox.dhcp.broadcom.net ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id i3sm17995365wrw.69.2019.11.04.12.28.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 12:28:03 -0800 (PST) From: Lance Richardson To: dev@dpdk.org Cc: ajit.khaparde@broadcom.com, ferruh.yigit@intel.com, Lance Richardson , stable@dpdk.org Date: Mon, 4 Nov 2019 15:27:45 -0500 Message-Id: <20191104202747.12897-3-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191104202747.12897-1-lance.richardson@broadcom.com> References: <20191104202747.12897-1-lance.richardson@broadcom.com> Subject: [dpdk-dev] [PATCH 2/4] net/bnxt: keep consistent rxq start/stop state X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Receive queue state needs to reflect "started" state when rebuilding the RSS table for Thor-based NICs. Move state update so that receive queues being started are included in the RSS table. Fixes: 38412304b50a ("net/bnxt: enable RSS for thor-based controllers") Cc: stable@dpdk.org Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_rxq.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index ab889c10e..e82eda9d7 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -444,6 +444,8 @@ int bnxt_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) * If queue is it started, we do not post buffers for Rx. */ rxq->rx_started = true; + dev->data->rx_queue_state[rx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED; + bnxt_free_hwrm_rx_ring(bp, rx_queue_id); rc = bnxt_alloc_hwrm_rx_ring(bp, rx_queue_id); if (rc) @@ -469,11 +471,11 @@ int bnxt_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) rc = bnxt_vnic_rss_configure(bp, vnic); } - if (rc == 0) + if (rc != 0) { dev->data->rx_queue_state[rx_queue_id] = - RTE_ETH_QUEUE_STATE_STARTED; - else + RTE_ETH_QUEUE_STATE_STOPPED; rxq->rx_started = false; + } PMD_DRV_LOG(INFO, "queue %d, rx_deferred_start %d, state %d!\n", From patchwork Mon Nov 4 20:27:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Richardson X-Patchwork-Id: 62394 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 38941A0352; Mon, 4 Nov 2019 21:28:20 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7627B37B4; Mon, 4 Nov 2019 21:28:09 +0100 (CET) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id 37D52378E for ; Mon, 4 Nov 2019 21:28:08 +0100 (CET) Received: by mail-wr1-f68.google.com with SMTP id w18so18670745wrt.3 for ; Mon, 04 Nov 2019 12:28:08 -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; bh=QrOjiKlft5/b0Nun8d706XLFnB8RyvwMHM5+Ft8/+JA=; b=OHqCmyIXKSQizhHE5HrPDD3rdKEg3vtwbJTXC0+FPXNxKMQNUioSODZhGkfF7wZKHa Gnl9HN0BDv1EAj/YEdKk0JKfutot9plC/S2YJuTES9tQrhHhOLOazbPv08gYVrzQGQ8W dlC5U0ZGojpPQm3lXAOsC1Jh3KtU/8pR88jbE= 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:in-reply-to :references; bh=QrOjiKlft5/b0Nun8d706XLFnB8RyvwMHM5+Ft8/+JA=; b=NpOt8MrMefot9/9DRGeSGwBkYEK/KPQoyauR37/abE3Dm4hAXUt9EGjQa+5N7yRWLr pB9xaJUhY/kgWWHTvAT2+tj7Tzgh/jTOfghRnDb6dq2ws8Kg/Wp0W3QuBNd8LIHy+mE7 BAOvRngQrxXli4LdwiLJTdAv7dwiNo7hV/uiLaMqSuoNaicKNMbH1UB0wOrIBs9V66/y 5yUqdLCIGlknhAnJ8kfXK3wXy5BOTi7BbcHHyFJUM6ohAz4Q+vu2GP1zd3kGd9cnsLbD PvDd5A7JXVulF7za5iHIDPtyXAR1XAYU0e/utc4kLm1Ka2iSno+CGqMyT9Fd4dV4RMsu O1Aw== X-Gm-Message-State: APjAAAUWLSdJEyAz8QGMxron27Dvwn2bkjxvy//k7JN6beGUC4SrhUHa zY6HfgI5DxgUc8D033+yB/oyJNwq/1cKNRCfRR6ObA7QLnYT26yMuGi3qlJEkia4fdAQRA+4ndY ibw9wex0w3OOoVPgxuxFck1igFh5iCq1CIueP1DSneBHyrkYEe74HQ8YQBaqbPTl6 X-Google-Smtp-Source: APXvYqyT2mNg9rUpcY+kvK7ecwUgRuG9DDqp2TZ2yae6RaPJS9Gaq9GiCULxwVFPyEWmKle8uUrWtg== X-Received: by 2002:a5d:5091:: with SMTP id a17mr23680029wrt.249.1572899287598; Mon, 04 Nov 2019 12:28:07 -0800 (PST) Received: from lrichardson-VirtualBox.dhcp.broadcom.net ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id i3sm17995365wrw.69.2019.11.04.12.28.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 12:28:07 -0800 (PST) From: Lance Richardson To: dev@dpdk.org Cc: ajit.khaparde@broadcom.com, ferruh.yigit@intel.com, Lance Richardson , stable@dpdk.org Date: Mon, 4 Nov 2019 15:27:46 -0500 Message-Id: <20191104202747.12897-4-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191104202747.12897-1-lance.richardson@broadcom.com> References: <20191104202747.12897-1-lance.richardson@broadcom.com> Subject: [dpdk-dev] [PATCH 3/4] net/bnxt: release hwrm lock before returning X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" The function bnxt_vnic_rss_configure_thor() returns early when all receive queues are stopped without releasing the hwrm spinlock, which causes subsequent HWRM operations to hang. Fix by ensuring that the lock is released before returning from this function. Fixes: 38412304b50a ("net/bnxt: enable RSS for thor-based controllers") Cc: stable@dpdk.org Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_hwrm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index ab6cb1dc3..bb4dcf4b2 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -4337,8 +4337,10 @@ bnxt_vnic_rss_configure_thor(struct bnxt *bp, struct bnxt_vnic_info *vnic) } /* Return if no rings are active. */ - if (cnt == max_rings) + if (cnt == max_rings) { + HWRM_UNLOCK(); return 0; + } /* Add rx/cp ring pair to RSS table. */ rxr = rxqs[k]->rx_ring; From patchwork Mon Nov 4 20:27:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Richardson X-Patchwork-Id: 62395 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B887A0352; Mon, 4 Nov 2019 21:28:29 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 671D74C8E; Mon, 4 Nov 2019 21:28:11 +0100 (CET) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by dpdk.org (Postfix) with ESMTP id 388D0322C for ; Mon, 4 Nov 2019 21:28:10 +0100 (CET) Received: by mail-wr1-f65.google.com with SMTP id o28so18634058wro.7 for ; Mon, 04 Nov 2019 12:28:10 -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; bh=uwdslJjRLdVn1N1xxSV2QD2YnG9fSmHaZLsjcuGS1vw=; b=NpzscMxShosk/HLyNWVBNx98ued71b82YxXMP7rsEf+Wpfx6ITU95qtSr8Zjv/PGF3 42HTGsUUIy1v7kEuO7hKj1pA42LkifkLMlrfkG0uPxoscEIMxy5Gcff93kGHcfoGgyRm adR6YXVL+xqvyN1btXyDvd2QgoFtBF3Wbk9LQ= 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:in-reply-to :references; bh=uwdslJjRLdVn1N1xxSV2QD2YnG9fSmHaZLsjcuGS1vw=; b=PR+kgYiL/0Br6DntL8pVHIcH+wdR0rRdLCgfr6iL7Sk4SLdQ2CKdHLbmx43trwyCmY tMi6N/aDNAyoSVSBxgZFXQT/l1t2nV3hqzHQyznc2AOnFH1uLhjw/5qelKDyLHSqb7hU WgMPQh4PHdh5A2GqJeO508XOcB9ioh1qQR+aSJZoZ9zAIx3FlLGxOWqjKA57Z9i/Ce/V ujNuo01qVWbHD3C2KPaW7if3ZE7fantsF48pwbX0jmDO1TjDkV5BOuLKm47oZwVlWjea CZBg2BakGiRf16MwASpu4NnEJZ9iOlW6MP0rA1b0DpC/Ky/VoF2o3x/ofZSpzX115AdN A68g== X-Gm-Message-State: APjAAAVldT/pRk9LOV0NdC67wyjF+wr2KyK/wUEOmLQiuLfHN0+ozyva smUGgnkqobfNJkvjsICby3QUL7Qi61kE0R8iQ5wGYVO1FWAhu6yFhmWZehsFulEUEzu3J082nXl xv1mVeb/jNVzrrQB0BM6V7n5ckeuEkedDgsFSx10by1U8t3P4jZVl9GRRQ33l8xT0 X-Google-Smtp-Source: APXvYqz6122X5EJk13E7H79az7Q6mBQJ1D+jl+w4razNIh8/gHksFi5B6tns/ozpSPz0cWc7HhubpQ== X-Received: by 2002:a5d:4c83:: with SMTP id z3mr25181717wrs.92.1572899289447; Mon, 04 Nov 2019 12:28:09 -0800 (PST) Received: from lrichardson-VirtualBox.dhcp.broadcom.net ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id i3sm17995365wrw.69.2019.11.04.12.28.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 12:28:08 -0800 (PST) From: Lance Richardson To: dev@dpdk.org Cc: ajit.khaparde@broadcom.com, ferruh.yigit@intel.com, Lance Richardson , stable@dpdk.org Date: Mon, 4 Nov 2019 15:27:47 -0500 Message-Id: <20191104202747.12897-5-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191104202747.12897-1-lance.richardson@broadcom.com> References: <20191104202747.12897-1-lance.richardson@broadcom.com> Subject: [dpdk-dev] [PATCH 4/4] net/bnxt: fix rxq start/stop for Thor based NICs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Controller-specific handling is required for Thor-based NICs when stopping or starting a receive queue, otherwise packet reception may not be reliably resumed when a stopped receive queue is restarted: - The VNIC default receive ring needs to be recomputed when a receive queue is stopped or started. - When stopping the last (or only) receive queue for a given VNIC, ensure that no packets can reach the default receive ring by temporarily setting the VNIC MRU to zero. Fixes: f8168ca0e690 ("net/bnxt: support thor controller") Cc: stable@dpdk.org Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_hwrm.c | 27 +++++++++++++++++++++---- drivers/net/bnxt/bnxt_rxq.c | 38 +++++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index bb4dcf4b2..2cba007ea 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -1696,10 +1696,29 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, struct bnxt_vnic_info *vnic) HWRM_PREP(req, VNIC_CFG, BNXT_USE_CHIMP_MB); if (BNXT_CHIP_THOR(bp)) { - struct bnxt_rx_queue *rxq = - bp->eth_dev->data->rx_queues[vnic->start_grp_id]; - struct bnxt_rx_ring_info *rxr = rxq->rx_ring; - struct bnxt_cp_ring_info *cpr = rxq->cp_ring; + int dflt_rxq = vnic->start_grp_id; + struct bnxt_rx_ring_info *rxr; + struct bnxt_cp_ring_info *cpr; + struct bnxt_rx_queue *rxq; + int i; + + /* + * The first active receive ring is used as the VNIC + * default receive ring. If there are no active receive + * rings (all corresponding receive queues are stopped), + * the first receive ring is used. + */ + for (i = vnic->start_grp_id; i < vnic->end_grp_id; i++) { + rxq = bp->eth_dev->data->rx_queues[i]; + if (rxq->rx_started) { + dflt_rxq = i; + break; + } + } + + rxq = bp->eth_dev->data->rx_queues[dflt_rxq]; + rxr = rxq->rx_ring; + cpr = rxq->cp_ring; req.default_rx_ring_id = rte_cpu_to_le_16(rxr->rx_ring_struct->fw_ring_id); diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index e82eda9d7..e7c012f68 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -451,6 +451,10 @@ int bnxt_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) if (rc) return rc; + if (BNXT_CHIP_THOR(bp)) { + /* Reconfigure default receive ring and MRU. */ + bnxt_hwrm_vnic_cfg(bp, rxq->vnic); + } PMD_DRV_LOG(INFO, "Rx queue started %d\n", rx_queue_id); if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) { @@ -491,7 +495,8 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf; struct bnxt_vnic_info *vnic = NULL; struct bnxt_rx_queue *rxq = NULL; - int rc = 0; + int active_queue_cnt = 0; + int i, rc = 0; rc = is_bnxt_in_error(bp); if (rc) @@ -507,8 +512,9 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) } rxq = bp->rx_queues[rx_queue_id]; + vnic = rxq->vnic; - if (rxq == NULL) { + if (!rxq || !vnic) { PMD_DRV_LOG(ERR, "Invalid Rx queue %d\n", rx_queue_id); return -EINVAL; } @@ -518,7 +524,6 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) PMD_DRV_LOG(DEBUG, "Rx queue stopped\n"); if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) { - vnic = rxq->vnic; if (BNXT_HAS_RING_GRPS(bp)) vnic->fw_grp_ids[rx_queue_id] = INVALID_HW_RING_ID; @@ -526,6 +531,33 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) rc = bnxt_vnic_rss_configure(bp, vnic); } + if (BNXT_CHIP_THOR(bp)) { + /* Compute current number of active receive queues. */ + for (i = vnic->start_grp_id; i < vnic->end_grp_id; i++) + if (bp->rx_queues[i]->rx_started) + active_queue_cnt++; + + /* + * For Thor, we need to ensure that the VNIC default receive + * ring corresponds to an active receive queue. When no queue + * is active, we need to temporarily set the MRU to zero so + * that packets are dropped early in the receive pipeline in + * order to prevent the VNIC default receive ring from being + * accessed. + */ + if (active_queue_cnt == 0) { + uint16_t saved_mru = vnic->mru; + + vnic->mru = 0; + /* Reconfigure default receive ring and MRU. */ + bnxt_hwrm_vnic_cfg(bp, vnic); + vnic->mru = saved_mru; + } else { + /* Reconfigure default receive ring. */ + bnxt_hwrm_vnic_cfg(bp, vnic); + } + } + if (rc == 0) bnxt_rx_queue_release_mbufs(rxq);