From patchwork Wed Nov 13 15:06:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 62960 X-Patchwork-Delegate: ajit.khaparde@broadcom.com 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 B1C3FA04C3; Wed, 13 Nov 2019 16:07:22 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 88AE12BC7; Wed, 13 Nov 2019 16:07:16 +0100 (CET) Received: from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 9365D2B8B for ; Wed, 13 Nov 2019 16:07:12 +0100 (CET) Received: from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net [10.75.242.48]) by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 3BC4E30C050; Wed, 13 Nov 2019 07:03:56 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 3BC4E30C050 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1573657436; bh=JKEe/iuxNZ4v1Fqm9GwYT5bs/xKyJwqfikzUroTYwSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CPsJCRpQLAexQ4t8XDuwu5Q5qblRIN8nUx7wpuBpivaCRr4XjyDS4h30gj/7yjfEl pGvhIrNqOzB9E1hL3nTHzgJbgHqGK9PcV78BUARlj+MDOV1zXLTEH/sSk4zYZSGW/C 44FF53YOxMq5afbH3CKoUiortePFrEF0NPFMvXJo= Received: from localhost.localdomain (unknown [10.230.26.250]) by mail-irv-17.broadcom.com (Postfix) with ESMTP id AAB9C14008B; Wed, 13 Nov 2019 07:07:06 -0800 (PST) From: Ajit Khaparde To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Rahul Gupta , Somnath Kotur Date: Wed, 13 Nov 2019 07:06:57 -0800 Message-Id: <20191113150700.2517-4-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191113150700.2517-1-ajit.khaparde@broadcom.com> References: <20191113082945.21277-1-somnath.kotur@broadcom.com> <20191113150700.2517-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 3/6] net/bnxt: fix flow creation with non-consecutive group ids 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" From: Rahul Gupta In non-RSS mode, vnics map 1:1 with Rx queues during init. This can create problems if non-consecutive group IDs are given as part of subsequent flow create cmds as they can end up pointing to Rx queues (mapped during init) that are different than the intended destination queue as specified in the flow create cmd. To fix this, now that we have the ability to dynamically create vnics, do not create any additional vnics other than the default vnic during init. Allocate them only during flow/filter creation time. When RSS is disabled we need to use the COS queue count queried from firmware. Fixes: 36024b2e7fe5 ("net/bnxt: allow dynamic creation of VNIC") Signed-off-by: Rahul Gupta Reviewed-by: Somnath Kotur --- drivers/net/bnxt/bnxt_flow.c | 4 +--- drivers/net/bnxt/bnxt_rxq.c | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 8f386cdf1..5af571448 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -1093,9 +1093,7 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, vnic->fw_vnic_id != INVALID_HW_RING_ID) goto use_vnic; - if (!rxq || - bp->vnic_info[0].fw_grp_ids[act_q->index] != - INVALID_HW_RING_ID) { + if (!rxq) { PMD_DRV_LOG(ERR, "Queue invalid or used with other VNIC\n"); rte_flow_error_set(error, diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index fa11bec4e..7fd079da3 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -35,7 +35,7 @@ int bnxt_mq_rx_configure(struct bnxt *bp) int start_grp_id, end_grp_id = 1, rc = 0; struct bnxt_vnic_info *vnic; struct bnxt_filter_info *filter; - enum rte_eth_nb_pools pools = bp->rx_cp_nr_rings, max_pools = 0; + enum rte_eth_nb_pools pools = 1, max_pools = 0; struct bnxt_rx_queue *rxq; bp->nr_vnics = 0; @@ -100,7 +100,10 @@ int bnxt_mq_rx_configure(struct bnxt *bp) rc = -EINVAL; goto err_out; } + } else if (!dev_conf->rxmode.mq_mode) { + pools = bp->rx_cosq_cnt ? bp->rx_cosq_cnt : pools; } + nb_q_per_grp = bp->rx_cp_nr_rings / pools; bp->rx_num_qs_per_vnic = nb_q_per_grp; PMD_DRV_LOG(DEBUG, "pools = %u nb_q_per_grp = %u\n",