138 lines
4.1 KiB
Diff
138 lines
4.1 KiB
Diff
From 40ebbda8bdcaa94f9a971b9546a54050e7f3ccf9 Mon Sep 17 00:00:00 2001
|
|
From: Jian Shen <shenjian15@huawei.com>
|
|
Date: Sat, 24 Jul 2021 15:43:39 +0800
|
|
Subject: [PATCH 050/283] net: hns3: refactor out hclgevf_get_rss_tuple()
|
|
|
|
mainline inclusion
|
|
from mainline-v5.12-rc1-dontuse
|
|
commit 73f7767ed0f93cd3269e7f5af75902a351faf5da
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMQV
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=73f7767ed0f93cd3269e7f5af75902a351faf5da
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
To improve code readability and maintainability, separate
|
|
the flow type parsing part and the converting part from
|
|
bloated hclgevf_get_rss_tuple().
|
|
|
|
Signed-off-by: Jian Shen <shenjian15@huawei.com>
|
|
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
---
|
|
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 67 ++++++++++++-------
|
|
1 file changed, 42 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
index f688217d4c59..accec5762d91 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
@@ -962,56 +962,73 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
|
|
return 0;
|
|
}
|
|
|
|
-static int hclgevf_get_rss_tuple(struct hnae3_handle *handle,
|
|
- struct ethtool_rxnfc *nfc)
|
|
+static int hclgevf_get_rss_tuple_by_flow_type(struct hclgevf_dev *hdev,
|
|
+ int flow_type, u8 *tuple_sets)
|
|
{
|
|
- struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
|
|
- struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg;
|
|
- u8 tuple_sets;
|
|
-
|
|
- if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
|
|
- return -EOPNOTSUPP;
|
|
-
|
|
- nfc->data = 0;
|
|
-
|
|
- switch (nfc->flow_type) {
|
|
+ switch (flow_type) {
|
|
case TCP_V4_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv4_tcp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_tcp_en;
|
|
break;
|
|
case UDP_V4_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv4_udp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_udp_en;
|
|
break;
|
|
case TCP_V6_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv6_tcp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_tcp_en;
|
|
break;
|
|
case UDP_V6_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv6_udp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_udp_en;
|
|
break;
|
|
case SCTP_V4_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv4_sctp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_sctp_en;
|
|
break;
|
|
case SCTP_V6_FLOW:
|
|
- tuple_sets = rss_cfg->rss_tuple_sets.ipv6_sctp_en;
|
|
+ *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_sctp_en;
|
|
break;
|
|
case IPV4_FLOW:
|
|
case IPV6_FLOW:
|
|
- tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT;
|
|
+ *tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT;
|
|
break;
|
|
default:
|
|
return -EINVAL;
|
|
}
|
|
|
|
- if (!tuple_sets)
|
|
- return 0;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static u64 hclgevf_convert_rss_tuple(u8 tuple_sets)
|
|
+{
|
|
+ u64 tuple_data = 0;
|
|
|
|
if (tuple_sets & HCLGEVF_D_PORT_BIT)
|
|
- nfc->data |= RXH_L4_B_2_3;
|
|
+ tuple_data |= RXH_L4_B_2_3;
|
|
if (tuple_sets & HCLGEVF_S_PORT_BIT)
|
|
- nfc->data |= RXH_L4_B_0_1;
|
|
+ tuple_data |= RXH_L4_B_0_1;
|
|
if (tuple_sets & HCLGEVF_D_IP_BIT)
|
|
- nfc->data |= RXH_IP_DST;
|
|
+ tuple_data |= RXH_IP_DST;
|
|
if (tuple_sets & HCLGEVF_S_IP_BIT)
|
|
- nfc->data |= RXH_IP_SRC;
|
|
+ tuple_data |= RXH_IP_SRC;
|
|
+
|
|
+ return tuple_data;
|
|
+}
|
|
+
|
|
+static int hclgevf_get_rss_tuple(struct hnae3_handle *handle,
|
|
+ struct ethtool_rxnfc *nfc)
|
|
+{
|
|
+ struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
|
|
+ u8 tuple_sets;
|
|
+ int ret;
|
|
+
|
|
+ if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
|
|
+ return -EOPNOTSUPP;
|
|
+
|
|
+ nfc->data = 0;
|
|
+
|
|
+ ret = hclgevf_get_rss_tuple_by_flow_type(hdev, nfc->flow_type,
|
|
+ &tuple_sets);
|
|
+ if (ret || !tuple_sets)
|
|
+ return ret;
|
|
+
|
|
+ nfc->data = hclgevf_convert_rss_tuple(tuple_sets);
|
|
|
|
return 0;
|
|
}
|
|
--
|
|
2.34.1
|
|
|