From patchwork Tue Jul 28 06:34:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 74919 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 841F6A0521; Tue, 28 Jul 2020 08:39:01 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 302211C1E9; Tue, 28 Jul 2020 08:35:52 +0200 (CEST) Received: from mail-wm1-f100.google.com (mail-wm1-f100.google.com [209.85.128.100]) by dpdk.org (Postfix) with ESMTP id 5C9041C0DA for ; Tue, 28 Jul 2020 08:35:30 +0200 (CEST) Received: by mail-wm1-f100.google.com with SMTP id t142so10624866wmt.4 for ; Mon, 27 Jul 2020 23:35:30 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=ojItC+ZCApBvRyZ+c80ghUN8URMZfSu1WVfc9ZsHPis=; b=VjzJIzy2NS0ZXYqiy/HLJiWiHZT4ezP+uc3OGWw8Qp2IacLYmc9j3ooGb97VfZ+xlz EOE7rq12DJoI2LZhxx/7G/Xv/MhBOIaqOH1TJddW2w0uI8CtbDve9wwkQLVZdCg9DH8N zTxqGN3D6uQOYP7jnR7RFIJ2DwMY/3fLo+gfY= 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:mime-version:content-transfer-encoding; bh=ojItC+ZCApBvRyZ+c80ghUN8URMZfSu1WVfc9ZsHPis=; b=aidTnbct/vxK/8vwK/H0+bHS2AaISQHRgtAR42MY8IJFb0/b7q1YXOkyK/tSypEtf9 LsB561vpAcHEutP4W0jqL5cNd0Dpz/ShKoebiQjGHNY1a3cU063f/Jz8i8SUm3SatZMI h+7lJVE+erLOAlvXEYtSmFEneCOk/ms5R6Hwu+GA0i7mAiI3fjQdOQoZhUeEeHqgzAXZ ZccdJ5aC1NIPBDAFsWGgqW4lwmDFNdRNalZDeQNnmsaO9Wz1WqAqv+cAMNVwkb/U1S6l tlyOYccNiQFlZoD2Y8p2mc+Smccyb64oNzLEDMXqbvQwj4lAqjdkNiIkxrKgbPxulZk3 GtYg== X-Gm-Message-State: AOAM533lsQzRQI+DzOwagtem80tch7AQSfRrWRvVc9WRuJpEsJiY4Ac2 dtL/Z2ivLscwhcvVnJIJfrkX67jVu0d7dmluUVSqr/f1Wz5rEY1RcygQQ1REOS4hQQzqvygNv0S nGn6gLKITSXlgh2+3cuPAG7XNFStoVPioTB+/fnXnwgDU3LUEVoiRrLGUe7zcjNMknf2vMTaE+z jnMA== X-Google-Smtp-Source: ABdhPJz9SGso1wht4ldIaFL5r1dY14k0lTMJHNe8K9vi+0kKM1TSFrFjrs8RQJtAVj0pc+AYLBBkFvcOvqAR X-Received: by 2002:a7b:c054:: with SMTP id u20mr2482319wmc.2.1595918129836; Mon, 27 Jul 2020 23:35:29 -0700 (PDT) Received: from localhost.localdomain ([192.19.223.252]) by smtp-relay.gmail.com with ESMTPS id r16sm30828wmh.29.2020.07.27.23.35.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 Jul 2020 23:35:29 -0700 (PDT) X-Relaying-Domain: broadcom.com From: Ajit Khaparde To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Somnath Kotur , Venkat Duvvuru Date: Mon, 27 Jul 2020 23:34:37 -0700 Message-Id: <20200728063439.23114-21-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20200728063439.23114-1-ajit.khaparde@broadcom.com> References: <20200728063439.23114-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 20/22] net/bnxt: cleanup VF-representor dev ops 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: Somnath Kotur No need to access rx_cfa_code, cfa_code_map from the VF-Rep functions anymore. Fixes: 322bd6e70272 ("net/bnxt: add port representor infrastructure") Reviewed-by: Venkat Duvvuru Signed-off-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- doc/guides/nics/bnxt.rst | 46 ++++++++++++++++++++++ drivers/net/bnxt/bnxt.h | 1 - drivers/net/bnxt/bnxt_reps.c | 75 ++++-------------------------------- 3 files changed, 53 insertions(+), 69 deletions(-) diff --git a/doc/guides/nics/bnxt.rst b/doc/guides/nics/bnxt.rst index 6ff75d0a2..129a16cfc 100644 --- a/doc/guides/nics/bnxt.rst +++ b/doc/guides/nics/bnxt.rst @@ -688,6 +688,52 @@ optimizes flow insertions and deletions. This is a tech preview feature, and is disabled by default. It can be enabled using bnxt devargs. For ex: "-w 0000:0d:00.0,host-based-truflow=1”. +Notes +----- + +- On stopping a device port, all the flows created on a port by the + application will be flushed from the hardware and any tables maintained + by the PMD. After stopping the device port, all flows on the port become + invalid and are not represented in the system anymore. + Instead of destroying or flushing such flows an application should discard + all references to these flows and re-create the flows as required after the + port is restarted. + +- While an application is free to use the group id attribute to group flows + together using a specific criteria, the BNXT PMD currently associates this + group id to a VNIC id. One such case is grouping of flows which are filtered + on the same source or destination MAC address. This allows packets of such + flows to be directed to one or more queues associated with the VNIC id. + This implementation is supported only when TRUFLOW functionality is disabled. + +Note: A VNIC represents a virtual interface in the hardware. It is a resource +in the RX path of the chip and is used to setup various target actions such as +RSS, MAC filtering etc. for the physical function in use. + +Virtual Function Port Representors +---------------------------------- +The BNXT PMD supports the creation of VF port representors for the control +and monitoring of BNXT virtual function devices. Each port representor +corresponds to a single virtual function of that device that is connected to a +VF. When there is no hardware flow offload, each packet transmitted by the VF +will be received by the corresponding representor. Similarly each packet that is +sent to a representor will be received by the VF. Applications can take +advantage of this feature when SRIOV is enabled. The representor will allow the +first packet that is transmitted by the VF to be received by the DPDK +application which can then decide if the flow should be offloaded to the +hardware. Once the flow is offloaded in the hardware, any packet matching the +flow will be received by the VF while the DPDK application will not receive it +any more. The BNXT PMD supports creation and handling of the port representors +when the PMD is initialized on a PF or trusted-VF. The user can specify the list +of VF IDs of the VFs for which the representors are needed by using the +``devargs`` option ``representor``.:: + + -w DBDF,representor=[0,1,4] + +Note that currently hot-plugging of representor ports is not supported so all +the required representors must be specified on the creation of the PF or the +trusted VF. + Application Support ------------------- diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 41e7ae5bd..f4b2a3f92 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -799,7 +799,6 @@ struct bnxt_vf_representor { uint16_t dflt_vnic_id; uint16_t svif; uint16_t vfr_tx_cfa_action; - uint16_t rx_cfa_code; uint32_t rep2vf_flow_id; uint32_t vf2rep_flow_id; /* Private data store of associated PF/Trusted VF */ diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index 2f775e0c0..6fa9a30d2 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -230,6 +230,9 @@ int bnxt_vf_rep_link_update_op(struct rte_eth_dev *eth_dev, int wait_to_compl) int rc; parent_bp = rep->parent_dev->data->dev_private; + if (!parent_bp) + return 0; + rc = bnxt_link_update_op(parent_bp->eth_dev, wait_to_compl); /* Link state. Inherited from PF or trusted VF */ @@ -324,7 +327,7 @@ static int bnxt_vfr_alloc(struct rte_eth_dev *vfr_ethdev) } /* Check if representor has been already allocated in FW */ - if (vfr->vfr_tx_cfa_action && vfr->rx_cfa_code) + if (vfr->vfr_tx_cfa_action) return 0; /* @@ -406,9 +409,11 @@ static int bnxt_vfr_free(struct bnxt_vf_representor *vfr) } parent_bp = vfr->parent_dev->data->dev_private; + if (!parent_bp) + return 0; /* Check if representor has been already freed in FW */ - if (!vfr->vfr_tx_cfa_action && !vfr->rx_cfa_code) + if (!vfr->vfr_tx_cfa_action) return 0; rc = bnxt_tf_vfr_free(vfr); @@ -419,11 +424,9 @@ static int bnxt_vfr_free(struct bnxt_vf_representor *vfr) return rc; } - parent_bp->cfa_code_map[vfr->rx_cfa_code] = BNXT_VF_IDX_INVALID; PMD_DRV_LOG(DEBUG, "freed representor %d in FW\n", vfr->vf_id); vfr->vfr_tx_cfa_action = 0; - vfr->rx_cfa_code = 0; rc = bnxt_hwrm_cfa_vfr_free(parent_bp, vfr->vf_id); @@ -456,7 +459,6 @@ int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev, { struct bnxt_vf_representor *rep_bp = eth_dev->data->dev_private; struct bnxt *parent_bp; - uint16_t max_vnics, i, j, vpool, vrxq; unsigned int max_rx_rings; int rc = 0; @@ -476,7 +478,6 @@ int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev, dev_info->max_tx_queues = max_rx_rings; dev_info->reta_size = bnxt_rss_hash_tbl_size(parent_bp); dev_info->hash_key_size = 40; - max_vnics = parent_bp->max_vnics; /* MTU specifics */ dev_info->min_mtu = RTE_ETHER_MIN_MTU; @@ -492,68 +493,6 @@ int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev, dev_info->tx_offload_capa = BNXT_DEV_TX_OFFLOAD_SUPPORT; dev_info->flow_type_rss_offloads = BNXT_ETH_RSS_SUPPORT; - /* *INDENT-OFF* */ - dev_info->default_rxconf = (struct rte_eth_rxconf) { - .rx_thresh = { - .pthresh = 8, - .hthresh = 8, - .wthresh = 0, - }, - .rx_free_thresh = 32, - /* If no descriptors available, pkts are dropped by default */ - .rx_drop_en = 1, - }; - - dev_info->default_txconf = (struct rte_eth_txconf) { - .tx_thresh = { - .pthresh = 32, - .hthresh = 0, - .wthresh = 0, - }, - .tx_free_thresh = 32, - .tx_rs_thresh = 32, - }; - eth_dev->data->dev_conf.intr_conf.lsc = 1; - - eth_dev->data->dev_conf.intr_conf.rxq = 1; - dev_info->rx_desc_lim.nb_min = BNXT_MIN_RING_DESC; - dev_info->rx_desc_lim.nb_max = BNXT_MAX_RX_RING_DESC; - dev_info->tx_desc_lim.nb_min = BNXT_MIN_RING_DESC; - dev_info->tx_desc_lim.nb_max = BNXT_MAX_TX_RING_DESC; - - /* *INDENT-ON* */ - - /* - * TODO: default_rxconf, default_txconf, rx_desc_lim, and tx_desc_lim - * need further investigation. - */ - - /* VMDq resources */ - vpool = 64; /* ETH_64_POOLS */ - vrxq = 128; /* ETH_VMDQ_DCB_NUM_QUEUES */ - for (i = 0; i < 4; vpool >>= 1, i++) { - if (max_vnics > vpool) { - for (j = 0; j < 5; vrxq >>= 1, j++) { - if (dev_info->max_rx_queues > vrxq) { - if (vpool > vrxq) - vpool = vrxq; - goto found; - } - } - /* Not enough resources to support VMDq */ - break; - } - } - /* Not enough resources to support VMDq */ - vpool = 0; - vrxq = 0; -found: - dev_info->max_vmdq_pools = vpool; - dev_info->vmdq_queue_num = vrxq; - - dev_info->vmdq_pool_base = 0; - dev_info->vmdq_queue_base = 0; - return 0; }