From patchwork Mon Oct 11 22:50:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 101118 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 493A6A034F; Tue, 12 Oct 2021 00:50:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 14967410E5; Tue, 12 Oct 2021 00:50:47 +0200 (CEST) Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by mails.dpdk.org (Postfix) with ESMTP id 2D143410E4 for ; Tue, 12 Oct 2021 00:50:46 +0200 (CEST) Received: by mail-pf1-f177.google.com with SMTP id o133so9723697pfg.7 for ; Mon, 11 Oct 2021 15:50:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:subject:date:message-id:mime-version; bh=FPNvmQMMkwND3ITICgGuTmVssGD8vFVEjrqWQx9kXV0=; b=fHsLt9+iOKp+ShaKiMvfruMAzijFjUF4a9VnvopUB04TvRiVDD4G4XHA0Y0wRzGQPw p6sMGj8vWuFFYDBKZh8lutoD5564l96Z2Uz7tiG/RE3rfif3mAeG/Xk9H/LGZgae+TqZ lZUxonU1M92y7HOQ2fo7jK0DHn1GSM8XkxwN8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=FPNvmQMMkwND3ITICgGuTmVssGD8vFVEjrqWQx9kXV0=; b=bFGowhd3TCorzWz6W0PhjOvcyajVi5ef5dP1+bB6XNxcjGf+uTYc4Di5jodeRLly1I x1r5AUf8MPx4hp/tnKUchMZRGORL69TilLphThwM9NxARdT05YuvTThEBUyNVm5HTB/t xiF67WdC3ZSUuCstKXh5T9+L64Hc6UnuILFRytG33npr1XWYYRK3NsV4HJ4egaz5RxzP BoHhfetGGTH04hfQj8zvW0EWCoPi4pfdhCp2kKG02AgxJqjXMwiE2i5QCFjKZFeVVseP L1pn7x+a2BoHdIdZaDkRhVSZavVdChRCTej6+5A36+NieEJ/zRRPzFPSWDPuwEX8ohPn 1OJA== X-Gm-Message-State: AOAM530rIyllbfboL5cffEMxXCEbYny05jS7qAw3KgoiijCXpY8l4TR4 2h8noVclpstOVsBhUpxowc8YJutZvoD2UNLZxmJ8cMTwc/RmqZ58XJnsYZisojHpgDWdeSy9Inn MjAbvCiPicCqngdorHPOi35jmchEWPOutCeR8LFJ68Dtbc4A8S0ZpONsvMGFf2Mw= X-Google-Smtp-Source: ABdhPJyPunRxjYbCFabrc0oYP+lHfm7Ko1R7MJrIn6jxB/HuWVkPiCK9LBJzRLD4FM1OOM3Y/YPQbA== X-Received: by 2002:a65:5385:: with SMTP id x5mr20216828pgq.140.1633992644775; Mon, 11 Oct 2021 15:50:44 -0700 (PDT) Received: from C02GC2QQMD6T.wifi.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id pi9sm459813pjb.31.2021.10.11.15.50.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Oct 2021 15:50:44 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Date: Mon, 11 Oct 2021 15:50:39 -0700 Message-Id: <20211011225039.62737-1-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH] net/bnxt: updates to RSS action support 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" Some changes to the RSS action support to return appropriate error. Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_filter.h | 2 +- drivers/net/bnxt/bnxt_flow.c | 60 +++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h index 07938534a9..587932c96f 100644 --- a/drivers/net/bnxt/bnxt_filter.h +++ b/drivers/net/bnxt/bnxt_filter.h @@ -43,7 +43,7 @@ struct bnxt_filter_info { #define HWRM_CFA_EM_FILTER 1 #define HWRM_CFA_NTUPLE_FILTER 2 #define HWRM_CFA_TUNNEL_REDIRECT_FILTER 3 -#define HWRM_CFA_CONFIG_VNIC 4 +#define HWRM_CFA_CONFIG 4 uint8_t filter_type; uint32_t dst_id; diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 7043d44b4d..b2ebb5634e 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -738,6 +738,10 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp, filter->enables = en; filter->valid_flags = valid_flags; + /* Items parsed but no filter to create in HW. */ + if (filter->enables == 0 && filter->valid_flags == 0) + filter->filter_type = HWRM_CFA_CONFIG; + return 0; } @@ -1127,7 +1131,7 @@ bnxt_vnic_rss_cfg_update(struct bnxt *bp, if (rss->func != RTE_ETH_HASH_FUNCTION_DEFAULT && rss->func != RTE_ETH_HASH_FUNCTION_TOEPLITZ) { rte_flow_error_set(error, - EINVAL, + ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, act, "Unsupported RSS hash function"); @@ -1136,10 +1140,7 @@ bnxt_vnic_rss_cfg_update(struct bnxt *bp, } /* key_len should match the hash key supported by hardware */ - if (rss->queue_num == 0 && - ((rss->key_len == 0 && rss->key != NULL) || - (rss->key_len != 0 && rss->key == NULL) || - (rss->key_len != 0 && rss->key_len != HW_HASH_KEY_SIZE))) { + if (rss->key_len != 0 && rss->key_len != HW_HASH_KEY_SIZE) { rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, @@ -1156,7 +1157,7 @@ bnxt_vnic_rss_cfg_update(struct bnxt *bp, */ if (rss->level > 2) { rte_flow_error_set(error, - EINVAL, + ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, act, "Unsupported hash level"); @@ -1187,7 +1188,7 @@ bnxt_vnic_rss_cfg_update(struct bnxt *bp, vnic->hash_mode = bnxt_rte_to_hwrm_hash_level(bp, rss->types, rss->level); - /* Update RETA table only if key_len != 0 */ + /* Update RSS key only if key_len != 0 */ if (rss->key_len != 0) memcpy(vnic->rss_hash_key, rss->key, rss->key_len); @@ -1272,17 +1273,6 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, use_ntuple = bnxt_filter_type_check(pattern, error); - rc = bnxt_validate_rss_action(actions); - if (rc != 0) { - rte_flow_error_set(error, - EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, - act, - "Invalid actions specified with RSS"); - rc = -rte_errno; - goto ret; - } - start: switch (act->type) { case RTE_FLOW_ACTION_TYPE_QUEUE: @@ -1504,6 +1494,17 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, filter->flow_id = filter1->flow_id; break; case RTE_FLOW_ACTION_TYPE_RSS: + rc = bnxt_validate_rss_action(actions); + if (rc != 0) { + rte_flow_error_set(error, + EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, + act, + "Invalid actions specified with RSS"); + rc = -rte_errno; + goto ret; + } + rss = (const struct rte_flow_action_rss *)act->conf; vnic_id = bnxt_get_vnic(bp, attr->group); @@ -1511,17 +1512,18 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, BNXT_VALID_VNIC_OR_RET(bp, vnic_id); vnic = &bp->vnic_info[vnic_id]; - if (filter->enables == 0 && filter->valid_flags == 0) { + /* + * For non NS3 cases, rte_flow_items will not be considered + * for RSS updates. + */ + if (filter->filter_type == HWRM_CFA_CONFIG) { /* RSS config update requested */ rc = bnxt_vnic_rss_cfg_update(bp, vnic, act, error); - if (rc != 0) { - rc = -rte_errno; - goto ret; - } else { - filter->dst_id = vnic->fw_vnic_id; - filter->filter_type = HWRM_CFA_CONFIG_VNIC; - break; - } + if (rc != 0) + return -rte_errno; + + filter->dst_id = vnic->fw_vnic_id; + break; } /* Check if requested RSS config matches RSS config of VNIC @@ -2194,6 +2196,10 @@ _bnxt_flow_destroy(struct bnxt *bp, return ret; } + /* For config type, there is no filter in HW. Finish cleanup here */ + if (filter->filter_type == HWRM_CFA_CONFIG) + goto done; + ret = bnxt_match_filter(bp, filter); if (ret == 0) PMD_DRV_LOG(ERR, "Could not find matching flow\n");