From: Dongdong Liu <liudongdong3@huawei.com>
To: <dev@dpdk.org>, <andrew.rybchenko@oktetlabs.ru>,
<ferruh.yigit@amd.com>, <thomas@monjalon.net>
Cc: <stable@dpdk.org>, <fengchengwen@huawei.com>,
<yisen.zhuang@huawei.com>, <liudongdong3@huawei.com>,
<lihuisong@huawei.com>, <haijie1@huawei.com>
Subject: [PATCH 15/19] net/hns3: fix inconsistent RSS behavior
Date: Fri, 30 Sep 2022 15:22:16 +0800 [thread overview]
Message-ID: <20220930072220.20753-16-liudongdong3@huawei.com> (raw)
In-Reply-To: <20220930072220.20753-1-liudongdong3@huawei.com>
From: Huisong Li <lihuisong@huawei.com>
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. So this patch fixes
this problem.
Fixes: 806f1d5ab0e3 ("net/hns3: set RSS hash type input configuration")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
---
| 266 ++++++++++++++++++++++++------------
1 file changed, 176 insertions(+), 90 deletions(-)
--git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c
index 6d71ee94a9..ea745c791f 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 */
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) },
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) },
+ { RTE_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 */
+ { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
+ { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
+ { RTE_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 */
+ { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
+ { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) },
- { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
- { RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
- { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
- { RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) },
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) },
+ { RTE_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 */
+ { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
+ { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
+ { RTE_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 */
+ { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
+ { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
+ BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) },
+ { RTE_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 */
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) },
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) },
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
+ HNS3_RSS_IP_L4_TUPLE,
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) },
- { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
- { RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
- { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
- BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
- { RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_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[] = {
- { RTE_ETH_RSS_FRAG_IPV4, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) |
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) },
- { RTE_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) },
- { RTE_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) },
- { RTE_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) },
- { RTE_ETH_RSS_IPV4,
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) |
- BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
- { RTE_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) },
- { RTE_ETH_RSS_FRAG_IPV6, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) |
- BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) },
- { RTE_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) },
- { RTE_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) },
- { RTE_ETH_RSS_NONFRAG_IPV6_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) |
+ { RTE_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) },
- { RTE_ETH_RSS_IPV6,
- BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) |
- BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
- { RTE_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;
}
+static uint64_t
+hns3_rss_calc_tuple_filed(uint64_t rss_hf)
+{
+ 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;
+ 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;
+
+ 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);
-
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++;
- }
- }
-
- /*
- * 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:
- * - RTE_ETH_RSS_L3_SRC_ONLY
- * - RTE_ETH_RSS_L3_DST_ONLY
- * - RTE_ETH_RSS_L4_SRC_ONLY
- * - RTE_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);
- }
- }
-
+ 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.22.0
next prev parent reply other threads:[~2022-09-30 7:24 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-30 7:22 [PATCH 00/19] some bugfixes and clean code for hns3 - part2 Dongdong Liu
2022-09-30 7:22 ` [PATCH 01/19] net/hns3: fix have no valid RSS rule Dongdong Liu
2022-09-30 7:22 ` [PATCH 02/19] net/hns3: fix RSS filter restore Dongdong Liu
2022-09-30 7:22 ` [PATCH 03/19] net/hns3: fix the lock protection of RSS flow rule Dongdong Liu
2022-09-30 7:22 ` [PATCH 04/19] net/hns3: fix RSS flow rule restore failed Dongdong Liu
2022-09-30 7:22 ` [PATCH 05/19] net/hns3: move flow direction rule recovery position Dongdong Liu
2022-09-30 7:22 ` [PATCH 06/19] net/hns3: fix hns3 restore filter function input Dongdong Liu
2022-09-30 7:22 ` [PATCH 07/19] net/hns3: fix gcov compile warning Dongdong Liu
2022-09-30 7:22 ` [PATCH 08/19] net/hns3: fix incorrect packet type report for GENEVE Dongdong Liu
2022-09-30 7:22 ` [PATCH 09/19] net/hns3: fix magic numbers Dongdong Liu
2022-09-30 7:22 ` [PATCH 10/19] net/hns3: fix header file self contained Dongdong Liu
2022-09-30 7:22 ` [PATCH 11/19] net/hns3: remove unused structure definition Dongdong Liu
2022-09-30 7:22 ` [PATCH 12/19] net/hns3: do not use reserved identifier macro Dongdong Liu
2022-09-30 7:22 ` [PATCH 13/19] net/hns3: fix fail to enable IPV4 or IPV6 packet RSS Dongdong Liu
2022-09-30 7:22 ` [PATCH 14/19] net/hns3: fix some spelling errors Dongdong Liu
2022-09-30 7:22 ` Dongdong Liu [this message]
2022-09-30 7:22 ` [PATCH 16/19] net/hns3: add check for L3 and L4 type Dongdong Liu
2022-09-30 7:22 ` [PATCH 17/19] net/hns3: revert fix mailbox communication with HW Dongdong Liu
2022-09-30 7:22 ` [PATCH 18/19] net/hns3: fix VF mark wrong message processed Dongdong Liu
2022-09-30 7:22 ` [PATCH 19/19] net/hns3: fix the obtaination of minimum Tx frame length Dongdong Liu
2022-10-05 6:18 ` [PATCH 00/19] some bugfixes and clean code for hns3 - part2 Andrew Rybchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220930072220.20753-16-liudongdong3@huawei.com \
--to=liudongdong3@huawei.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=ferruh.yigit@amd.com \
--cc=haijie1@huawei.com \
--cc=lihuisong@huawei.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
--cc=yisen.zhuang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).