Sync some patches for hns3 PMD, telemetry and testpmd. And main modifications are as follows: - backport some bugfixes for hns3 - revert Tx performance optimization for hns3 - add Rx/Tx descriptor dump feature for hns3 - refactor some RSS commands for testpmd - add ethdev telemetry private dump - add dmadev telemetry - sync telemetry lib Signed-off-by: Huisong Li <lihuisong@huawei.com> (cherry picked from commit 4f06d27eff9aa99c2e2073ac74328893990ed8ed)
381 lines
14 KiB
Diff
381 lines
14 KiB
Diff
From c300374b7ef19f05acaa6501093610fbe25bc187 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Fri, 21 Oct 2022 15:36:35 +0800
|
|
Subject: [PATCH 159/189] net/hns3: fix IPv4 RSS
|
|
|
|
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")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_rss.c | 266 ++++++++++++++++++++++++------------
|
|
1 file changed, 176 insertions(+), 90 deletions(-)
|
|
|
|
diff --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.23.0
|
|
|