Skip to content

Commit ab6e32d

Browse files
IronShendavem330
authored andcommitted
net: hns3: fix incorrect handling of sctp6 rss tuple
For DEVICE_VERSION_V2, the hardware only supports src-ip, dst-ip and verification-tag for rss tuple set of sctp6 packet. For DEVICE_VERSION_V3, the hardware supports src-port and dst-port as well. Currently, when user queries the sctp6 rss tuples info, some unsupported information will be showed on V2. So add a check for hardware version when initializing and queries sctp6 rss tuple to fix this issue. Fixes: 46a3df9 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support") Signed-off-by: Jian Shen <[email protected]> Signed-off-by: Huazhong Tan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 65e61e3 commit ab6e32d

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4538,8 +4538,8 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
45384538
req->ipv4_sctp_en = tuple_sets;
45394539
break;
45404540
case SCTP_V6_FLOW:
4541-
if ((nfc->data & RXH_L4_B_0_1) ||
4542-
(nfc->data & RXH_L4_B_2_3))
4541+
if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 &&
4542+
(nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)))
45434543
return -EINVAL;
45444544

45454545
req->ipv6_sctp_en = tuple_sets;
@@ -4731,6 +4731,8 @@ static void hclge_rss_init_cfg(struct hclge_dev *hdev)
47314731
vport[i].rss_tuple_sets.ipv6_udp_en =
47324732
HCLGE_RSS_INPUT_TUPLE_OTHER;
47334733
vport[i].rss_tuple_sets.ipv6_sctp_en =
4734+
hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ?
4735+
HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT :
47344736
HCLGE_RSS_INPUT_TUPLE_SCTP;
47354737
vport[i].rss_tuple_sets.ipv6_fragment_en =
47364738
HCLGE_RSS_INPUT_TUPLE_OTHER;

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@
107107
#define HCLGE_D_IP_BIT BIT(2)
108108
#define HCLGE_S_IP_BIT BIT(3)
109109
#define HCLGE_V_TAG_BIT BIT(4)
110+
#define HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT \
111+
(HCLGE_D_IP_BIT | HCLGE_S_IP_BIT | HCLGE_V_TAG_BIT)
110112

111113
#define HCLGE_RSS_TC_SIZE_0 1
112114
#define HCLGE_RSS_TC_SIZE_1 2

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -917,8 +917,8 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
917917
req->ipv4_sctp_en = tuple_sets;
918918
break;
919919
case SCTP_V6_FLOW:
920-
if ((nfc->data & RXH_L4_B_0_1) ||
921-
(nfc->data & RXH_L4_B_2_3))
920+
if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 &&
921+
(nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)))
922922
return -EINVAL;
923923

924924
req->ipv6_sctp_en = tuple_sets;
@@ -2502,7 +2502,10 @@ static void hclgevf_rss_init_cfg(struct hclgevf_dev *hdev)
25022502
tuple_sets->ipv4_fragment_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
25032503
tuple_sets->ipv6_tcp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
25042504
tuple_sets->ipv6_udp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2505-
tuple_sets->ipv6_sctp_en = HCLGEVF_RSS_INPUT_TUPLE_SCTP;
2505+
tuple_sets->ipv6_sctp_en =
2506+
hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ?
2507+
HCLGEVF_RSS_INPUT_TUPLE_SCTP_NO_PORT :
2508+
HCLGEVF_RSS_INPUT_TUPLE_SCTP;
25062509
tuple_sets->ipv6_fragment_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
25072510
}
25082511

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@
122122
#define HCLGEVF_D_IP_BIT BIT(2)
123123
#define HCLGEVF_S_IP_BIT BIT(3)
124124
#define HCLGEVF_V_TAG_BIT BIT(4)
125+
#define HCLGEVF_RSS_INPUT_TUPLE_SCTP_NO_PORT \
126+
(HCLGEVF_D_IP_BIT | HCLGEVF_S_IP_BIT | HCLGEVF_V_TAG_BIT)
125127

126128
#define HCLGEVF_STATS_TIMER_INTERVAL 36U
127129

0 commit comments

Comments
 (0)