From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C8D3FA00C2 for ; Thu, 3 Nov 2022 10:32:59 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C26634069B; Thu, 3 Nov 2022 10:32:59 +0100 (CET) Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by mails.dpdk.org (Postfix) with ESMTP id 431DA40694 for ; Thu, 3 Nov 2022 10:32:58 +0100 (CET) Received: by mail-wr1-f45.google.com with SMTP id v1so1697692wrt.11 for ; Thu, 03 Nov 2022 02:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZhR4Nsw4rAkxkLKLMsw7kUgan8n3yZr/e+zfQbFRY3w=; b=jk1a28ViUuv428dwCfMtiao/+qGPGGFCLBHcPL/UJsa3/hSeWhuxgQqHTfaE1evPnF kEKqxlZHRTwVwE9J3D97KXtSWrBN+8nGQnoJlN6GWBmxYf0RklzfipZvVSvaLzlYumDa Yblh8w1Kaz+Y6SE9/C85ep0q7ifpDBL8NlRiwOppigt1nbsIfPu/KGonqKYj5PcUEOdC 8MDpTsqfBz+GgZTgjRCGEHcwC9HADAoTcu14ogz/tw2dUTG/LiSymNyzfVBk0fC4/Vmn 5Cl1KmDSSP10xnGq+F4ZIfa2W5Sn1t+QeuTchd05x6/PnVS7FXh7tAvjRXnvtoUjPYRj Fgow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZhR4Nsw4rAkxkLKLMsw7kUgan8n3yZr/e+zfQbFRY3w=; b=Ed4fTZev9dII0vQBUwiSSL2avN7DNJy2Q35fvgyb/gZKWUUrXmscS8k3lhFZE7spLx 509w+UQdzniJoNZT0Pn8FF8fIGUI49SCcfji1DqrEnvBa3rRPjb/H4DVBiXXIAhFq1gh 2icYDRQQYtkOAK+4uYfHxsSEfZhs6eB5hQjDslQH9BaakovHmNHS88oSDyaDlL+L6JaY RPeGcSbxiwQBpCUVdLN7S0wwmh6VDmTAEeju1e8BZHvlH/B5BucFOyNFmLdpSMCyf7/t 716IwRLzUq3tg2JiHqsE/fL9ra18qHXbRAgC6lFvgRMt1Wixmh23UpZTWMTEO2JNjrTz wEZg== X-Gm-Message-State: ACrzQf225Zc8026LHX2IKOwNoUsOnL3z29vCEsoztQob8yJqLT14wMWM /Q2SsOZUhyA25S8V/EVyyadci7Y6OQ+Hkhhv X-Google-Smtp-Source: AMsMyM7AfAScsxeEafDdiIkegUSsQLIOk14STrmXejrdlBtvf9uVZ+CbCQfCcOVG8yywoTINI7+hQA== X-Received: by 2002:adf:eb0b:0:b0:236:bdb4:4e8 with SMTP id s11-20020adfeb0b000000b00236bdb404e8mr15314437wrn.667.1667467977878; Thu, 03 Nov 2022 02:32:57 -0700 (PDT) Received: from localhost ([137.220.119.58]) by smtp.gmail.com with ESMTPSA id be8-20020a05600c1e8800b003cf894dbc4fsm700309wmb.25.2022.11.03.02.32.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Nov 2022 02:32:57 -0700 (PDT) From: luca.boccassi@gmail.com To: Huisong Li Cc: Dongdong Liu , dpdk stable Subject: patch 'net/hns3: fix IPv4 RSS' has been queued to stable release 20.11.7 Date: Thu, 3 Nov 2022 09:27:45 +0000 Message-Id: <20221103092758.1099402-87-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221103092758.1099402-1-luca.boccassi@gmail.com> References: <20221103092758.1099402-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 20.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/05/22. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/1d2054bc3718635ead72104661a2d42b387e4aa7 Thanks. Luca Boccassi --- >From 1d2054bc3718635ead72104661a2d42b387e4aa7 Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Fri, 30 Sep 2022 15:22:16 +0800 Subject: [PATCH] net/hns3: fix IPv4 RSS [ upstream commit 2bd90635bde040d5c8b66f3b48b7a48d2d4e4e83 ] When user only use 'ipv4' to set 'rss_hf', hns3 will enable all tuple fields for 'ipv4' flow. But if user use 'ipv4-tcp' , 'ipv4' and 'l4-src-only' to set 'rss_hf', driver does not enable all tuple fields for 'ipv4' flow. Fixes: 806f1d5ab0e3 ("net/hns3: set RSS hash type input configuration") Signed-off-by: Huisong Li Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_rss.c | 270 ++++++++++++++++++++++++------------ 1 file changed, 178 insertions(+), 92 deletions(-) diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c index ad9e74262f..cec152baa4 100644 --- a/drivers/net/hns3/hns3_rss.c +++ b/drivers/net/hns3/hns3_rss.c @@ -70,130 +70,209 @@ enum hns3_tuple_field { HNS3_RSS_FIELD_IPV6_FRAG_IP_S }; +enum hns3_rss_tuple_type { + HNS3_RSS_IP_TUPLE, + HNS3_RSS_IP_L4_TUPLE, +}; + static const struct { uint64_t rss_types; + uint16_t tuple_type; uint64_t rss_field; } hns3_set_tuple_table[] = { + /* IPV4-FRAG */ { ETH_RSS_FRAG_IPV4 | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) }, { ETH_RSS_FRAG_IPV4 | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) }, + { ETH_RSS_FRAG_IPV4, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) }, + + /* IPV4 */ + { ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) }, + { ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, + { ETH_RSS_IPV4, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, + + /* IPV4-OTHER */ + { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) }, + { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, + { ETH_RSS_NONFRAG_IPV4_OTHER, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, + + /* IPV4-TCP */ { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) }, { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) }, + { ETH_RSS_NONFRAG_IPV4_TCP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) }, + + /* IPV4-UDP */ { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) }, { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) }, + { ETH_RSS_NONFRAG_IPV4_UDP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) }, + + /* IPV4-SCTP */ { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) }, { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) }, - { ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) }, - { ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, - { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_SRC_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) }, - { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_DST_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, + { ETH_RSS_NONFRAG_IPV4_SCTP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_VER) }, + + /* IPV6-FRAG */ { ETH_RSS_FRAG_IPV6 | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) }, { ETH_RSS_FRAG_IPV6 | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) }, + { ETH_RSS_FRAG_IPV6, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) }, + + /* IPV6 */ + { ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) }, + { ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, + { ETH_RSS_IPV6, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, + + /* IPV6-OTHER */ + { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) }, + { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, + { ETH_RSS_NONFRAG_IPV6_OTHER, + HNS3_RSS_IP_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, + + /* IPV6-TCP */ { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) }, { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) }, + { ETH_RSS_NONFRAG_IPV6_TCP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) }, + + /* IPV6-UDP */ { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) }, { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) }, + { ETH_RSS_NONFRAG_IPV6_UDP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) }, + + /* IPV6-SCTP */ { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) }, { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) }, { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) }, { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY, + HNS3_RSS_IP_L4_TUPLE, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) }, - { ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) }, - { ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, - { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_SRC_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) }, - { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_DST_ONLY, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, -}; - -static const struct { - uint64_t rss_types; - uint64_t rss_field; -} hns3_set_rss_types[] = { - { ETH_RSS_FRAG_IPV4, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) }, - { ETH_RSS_NONFRAG_IPV4_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) }, - { ETH_RSS_NONFRAG_IPV4_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) }, - { ETH_RSS_NONFRAG_IPV4_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_VER) }, - { ETH_RSS_IPV4, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, - { ETH_RSS_NONFRAG_IPV4_OTHER, - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) }, - { ETH_RSS_FRAG_IPV6, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) }, - { ETH_RSS_NONFRAG_IPV6_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) }, - { ETH_RSS_NONFRAG_IPV6_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) }, - { ETH_RSS_NONFRAG_IPV6_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) | + { ETH_RSS_NONFRAG_IPV6_SCTP, + HNS3_RSS_IP_L4_TUPLE, + BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) | BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) | BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) | BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) | BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_VER) }, - { ETH_RSS_IPV6, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }, - { ETH_RSS_NONFRAG_IPV6_OTHER, - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) | - BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) } }; /* @@ -321,46 +400,53 @@ hns3_rss_reset_indir_table(struct hns3_hw *hw) return ret; } -int -hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) +static uint64_t +hns3_rss_calc_tuple_filed(uint64_t rss_hf) { - struct hns3_rss_input_tuple_cmd *req; - struct hns3_cmd_desc desc; - uint32_t fields_count = 0; /* count times for setting tuple fields */ + uint64_t l3_only_mask = ETH_RSS_L3_SRC_ONLY | + ETH_RSS_L3_DST_ONLY; + uint64_t l4_only_mask = ETH_RSS_L4_SRC_ONLY | + ETH_RSS_L4_DST_ONLY; + uint64_t l3_l4_only_mask = l3_only_mask | l4_only_mask; + bool has_l3_l4_only = !!(rss_hf & l3_l4_only_mask); + bool has_l3_only = !!(rss_hf & l3_only_mask); + uint64_t tuple = 0; uint32_t i; - int ret; - - hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false); - - req = (struct hns3_rss_input_tuple_cmd *)desc.data; for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) { - if ((rss_hf & hns3_set_tuple_table[i].rss_types) == - hns3_set_tuple_table[i].rss_types) { - req->tuple_field |= - rte_cpu_to_le_64(hns3_set_tuple_table[i].rss_field); - fields_count++; - } - } + if ((rss_hf & hns3_set_tuple_table[i].rss_types) != + hns3_set_tuple_table[i].rss_types) + continue; - /* - * When user does not specify the following types or a combination of - * the following types, it enables all fields for the supported RSS - * types. the following types as: - * - ETH_RSS_L3_SRC_ONLY - * - ETH_RSS_L3_DST_ONLY - * - ETH_RSS_L4_SRC_ONLY - * - ETH_RSS_L4_DST_ONLY - */ - if (fields_count == 0) { - for (i = 0; i < RTE_DIM(hns3_set_rss_types); i++) { - if ((rss_hf & hns3_set_rss_types[i].rss_types) == - hns3_set_rss_types[i].rss_types) - req->tuple_field |= rte_cpu_to_le_64( - hns3_set_rss_types[i].rss_field); + if (hns3_set_tuple_table[i].tuple_type == HNS3_RSS_IP_TUPLE) { + if (hns3_set_tuple_table[i].rss_types & l3_only_mask || + !has_l3_only) + tuple |= hns3_set_tuple_table[i].rss_field; + continue; } + + /* For IP types with L4, we need check both L3 and L4 */ + if (hns3_set_tuple_table[i].rss_types & l3_l4_only_mask || + !has_l3_l4_only) + tuple |= hns3_set_tuple_table[i].rss_field; } + return tuple; +} + +int +hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) +{ + struct hns3_rss_input_tuple_cmd *req; + struct hns3_cmd_desc desc; + uint64_t tuple_field; + int ret; + + hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false); + req = (struct hns3_rss_input_tuple_cmd *)desc.data; + + tuple_field = hns3_rss_calc_tuple_filed(rss_hf); + req->tuple_field = rte_cpu_to_le_64(tuple_field); ret = hns3_cmd_send(hw, &desc, 1); if (ret) { hns3_err(hw, "Update RSS flow types tuples failed %d", ret); -- 2.34.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-11-03 09:27:30.750906100 +0000 +++ 0087-net-hns3-fix-IPv4-RSS.patch 2022-11-03 09:27:25.549425848 +0000 @@ -1 +1 @@ -From 2bd90635bde040d5c8b66f3b48b7a48d2d4e4e83 Mon Sep 17 00:00:00 2001 +From 1d2054bc3718635ead72104661a2d42b387e4aa7 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 2bd90635bde040d5c8b66f3b48b7a48d2d4e4e83 ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -17,2 +18,2 @@ - drivers/net/hns3/hns3_rss.c | 266 ++++++++++++++++++++++++------------ - 1 file changed, 176 insertions(+), 90 deletions(-) + drivers/net/hns3/hns3_rss.c | 270 ++++++++++++++++++++++++------------ + 1 file changed, 178 insertions(+), 92 deletions(-) @@ -21 +22 @@ -index 6d71ee94a9..ea745c791f 100644 +index ad9e74262f..cec152baa4 100644 @@ -39 +40 @@ - { RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_FRAG_IPV4 | ETH_RSS_L3_SRC_ONLY, @@ -42 +43 @@ - { RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_FRAG_IPV4 | ETH_RSS_L3_DST_ONLY, @@ -45 +46 @@ -+ { RTE_ETH_RSS_FRAG_IPV4, ++ { ETH_RSS_FRAG_IPV4, @@ -51 +52 @@ -+ { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY, ++ { ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, @@ -54 +55 @@ -+ { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY, ++ { ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, @@ -57 +58 @@ -+ { RTE_ETH_RSS_IPV4, ++ { ETH_RSS_IPV4, @@ -63 +64 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY, ++ { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_SRC_ONLY, @@ -66 +67 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY, ++ { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_DST_ONLY, @@ -69 +70 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_OTHER, ++ { ETH_RSS_NONFRAG_IPV4_OTHER, @@ -75 +76 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY, @@ -78 +79 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_DST_ONLY, @@ -81 +82 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY, @@ -84 +85 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY, @@ -87 +88 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_TCP, ++ { ETH_RSS_NONFRAG_IPV4_TCP, @@ -95 +96 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY, @@ -98 +99 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_DST_ONLY, @@ -101 +102 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY, @@ -104 +105 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY, @@ -107 +108 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_UDP, ++ { ETH_RSS_NONFRAG_IPV4_UDP, @@ -115 +116 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_SRC_ONLY, @@ -118 +119 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_DST_ONLY, @@ -121 +122 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY, @@ -124 +125 @@ - { RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY, @@ -127 +128 @@ -- { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY, +- { ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, @@ -129 +130 @@ -- { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY, +- { ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, @@ -131 +132 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY, +- { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_SRC_ONLY, @@ -133 +134 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY, +- { ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_L3_DST_ONLY, @@ -135 +136 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV4_SCTP, ++ { ETH_RSS_NONFRAG_IPV4_SCTP, @@ -144 +145 @@ - { RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_FRAG_IPV6 | ETH_RSS_L3_SRC_ONLY, @@ -147 +148 @@ - { RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_FRAG_IPV6 | ETH_RSS_L3_DST_ONLY, @@ -150 +151 @@ -+ { RTE_ETH_RSS_FRAG_IPV6, ++ { ETH_RSS_FRAG_IPV6, @@ -156 +157 @@ -+ { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY, ++ { ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, @@ -159 +160 @@ -+ { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY, ++ { ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, @@ -162 +163 @@ -+ { RTE_ETH_RSS_IPV6, ++ { ETH_RSS_IPV6, @@ -168 +169 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY, ++ { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_SRC_ONLY, @@ -171 +172 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_DST_ONLY, ++ { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_DST_ONLY, @@ -174 +175 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV6_OTHER, ++ { ETH_RSS_NONFRAG_IPV6_OTHER, @@ -180 +181 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY, @@ -183 +184 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_DST_ONLY, @@ -186 +187 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY, @@ -189 +190 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY, @@ -192 +193 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV6_TCP, ++ { ETH_RSS_NONFRAG_IPV6_TCP, @@ -200 +201 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY, @@ -203 +204 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_DST_ONLY, @@ -206 +207 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY, @@ -209 +210 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY, @@ -212 +213 @@ -+ { RTE_ETH_RSS_NONFRAG_IPV6_UDP, ++ { ETH_RSS_NONFRAG_IPV6_UDP, @@ -220 +221 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY, @@ -223 +224 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_DST_ONLY, @@ -226 +227 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_SRC_ONLY, + { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY, @@ -229 +230 @@ - { RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_DST_ONLY, + { ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY, @@ -232 +233 @@ -- { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY, +- { ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, @@ -234 +235 @@ -- { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY, +- { ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, @@ -236 +237 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY, +- { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_SRC_ONLY, @@ -238 +239 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_DST_ONLY, +- { ETH_RSS_NONFRAG_IPV6_OTHER | ETH_RSS_L3_DST_ONLY, @@ -246 +247 @@ -- { RTE_ETH_RSS_FRAG_IPV4, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) | +- { ETH_RSS_FRAG_IPV4, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) | @@ -248 +249 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) | +- { ETH_RSS_NONFRAG_IPV4_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) | @@ -252 +253 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) | +- { ETH_RSS_NONFRAG_IPV4_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) | @@ -256 +257 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) | +- { ETH_RSS_NONFRAG_IPV4_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) | @@ -261 +262 @@ -- { RTE_ETH_RSS_IPV4, +- { ETH_RSS_IPV4, @@ -264 +265 @@ -- { RTE_ETH_RSS_NONFRAG_IPV4_OTHER, +- { ETH_RSS_NONFRAG_IPV4_OTHER, @@ -267 +268 @@ -- { RTE_ETH_RSS_FRAG_IPV6, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) | +- { ETH_RSS_FRAG_IPV6, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) | @@ -269 +270 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) | +- { ETH_RSS_NONFRAG_IPV6_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) | @@ -273 +274 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) | +- { ETH_RSS_NONFRAG_IPV6_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) | @@ -277,2 +278,2 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) | -+ { RTE_ETH_RSS_NONFRAG_IPV6_SCTP, +- { ETH_RSS_NONFRAG_IPV6_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) | ++ { ETH_RSS_NONFRAG_IPV6_SCTP, @@ -285 +286 @@ -- { RTE_ETH_RSS_IPV6, +- { ETH_RSS_IPV6, @@ -288 +289 @@ -- { RTE_ETH_RSS_NONFRAG_IPV6_OTHER, +- { ETH_RSS_NONFRAG_IPV6_OTHER, @@ -297,0 +299,2 @@ +-int +-hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) @@ -300,5 +303,8 @@ -+{ -+ uint64_t l3_only_mask = RTE_ETH_RSS_L3_SRC_ONLY | -+ RTE_ETH_RSS_L3_DST_ONLY; -+ uint64_t l4_only_mask = RTE_ETH_RSS_L4_SRC_ONLY | -+ RTE_ETH_RSS_L4_DST_ONLY; + { +- struct hns3_rss_input_tuple_cmd *req; +- struct hns3_cmd_desc desc; +- uint32_t fields_count = 0; /* count times for setting tuple fields */ ++ uint64_t l3_only_mask = ETH_RSS_L3_SRC_ONLY | ++ ETH_RSS_L3_DST_ONLY; ++ uint64_t l4_only_mask = ETH_RSS_L4_SRC_ONLY | ++ ETH_RSS_L4_DST_ONLY; @@ -309,34 +315,2 @@ -+ uint32_t i; -+ -+ for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) { -+ if ((rss_hf & hns3_set_tuple_table[i].rss_types) != -+ hns3_set_tuple_table[i].rss_types) -+ continue; -+ -+ if (hns3_set_tuple_table[i].tuple_type == HNS3_RSS_IP_TUPLE) { -+ if (hns3_set_tuple_table[i].rss_types & l3_only_mask || -+ !has_l3_only) -+ tuple |= hns3_set_tuple_table[i].rss_field; -+ continue; -+ } -+ -+ /* For IP types with L4, we need check both L3 and L4 */ -+ if (hns3_set_tuple_table[i].rss_types & l3_l4_only_mask || -+ !has_l3_l4_only) -+ tuple |= hns3_set_tuple_table[i].rss_field; -+ } -+ -+ return tuple; -+} -+ - int - hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) - { - struct hns3_rss_input_tuple_cmd *req; - struct hns3_cmd_desc desc; -- uint32_t fields_count = 0; /* count times for setting tuple fields */ -- uint32_t i; -+ uint64_t tuple_field; - int ret; - - hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false); + uint32_t i; +- int ret; @@ -344 +318,3 @@ - req = (struct hns3_rss_input_tuple_cmd *)desc.data; +- hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false); +- +- req = (struct hns3_rss_input_tuple_cmd *)desc.data; @@ -346 +322 @@ -- for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) { + for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) { @@ -354 +330,4 @@ -- ++ if ((rss_hf & hns3_set_tuple_table[i].rss_types) != ++ hns3_set_tuple_table[i].rss_types) ++ continue; + @@ -359,4 +338,4 @@ -- * - RTE_ETH_RSS_L3_SRC_ONLY -- * - RTE_ETH_RSS_L3_DST_ONLY -- * - RTE_ETH_RSS_L4_SRC_ONLY -- * - RTE_ETH_RSS_L4_DST_ONLY +- * - ETH_RSS_L3_SRC_ONLY +- * - ETH_RSS_L3_DST_ONLY +- * - ETH_RSS_L4_SRC_ONLY +- * - ETH_RSS_L4_DST_ONLY @@ -370,3 +349,27 @@ -- } -- } -- ++ if (hns3_set_tuple_table[i].tuple_type == HNS3_RSS_IP_TUPLE) { ++ if (hns3_set_tuple_table[i].rss_types & l3_only_mask || ++ !has_l3_only) ++ tuple |= hns3_set_tuple_table[i].rss_field; ++ continue; + } ++ ++ /* For IP types with L4, we need check both L3 and L4 */ ++ if (hns3_set_tuple_table[i].rss_types & l3_l4_only_mask || ++ !has_l3_l4_only) ++ tuple |= hns3_set_tuple_table[i].rss_field; + } + ++ return tuple; ++} ++ ++int ++hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf) ++{ ++ struct hns3_rss_input_tuple_cmd *req; ++ struct hns3_cmd_desc desc; ++ uint64_t tuple_field; ++ int ret; ++ ++ hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false); ++ req = (struct hns3_rss_input_tuple_cmd *)desc.data; ++