Skip to content

Commit 944de48

Browse files
Guojia Liaodavem330
authored andcommitted
net: hns3: fix RSS config lost after VF reset.
Currently, VF's RSS configuration would be set to default after VF reset, the the user's one will loss. To fix it, this patch separates hclgevf_rss_init_hw() into two parts, one sets up the default RSS configuration and just be called when driver loading, one configures the hardware and be called by driver loading or reset. Fixes: d97b307 ("net: hns3: Add RSS tuples support for VF") Signed-off-by: Guojia Liao <liaoguojia@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 74ef402 commit 944de48

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

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

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,50 +2124,51 @@ static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en)
21242124
return ret;
21252125
}
21262126

2127-
static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)
2127+
static void hclgevf_rss_init_cfg(struct hclgevf_dev *hdev)
21282128
{
21292129
struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg;
2130-
int ret;
2130+
struct hclgevf_rss_tuple_cfg *tuple_sets;
21312131
u32 i;
21322132

2133+
rss_cfg->hash_algo = HCLGEVF_RSS_HASH_ALGO_TOEPLITZ;
21332134
rss_cfg->rss_size = hdev->nic.kinfo.rss_size;
2134-
2135+
tuple_sets = &rss_cfg->rss_tuple_sets;
21352136
if (hdev->pdev->revision >= 0x21) {
21362137
rss_cfg->hash_algo = HCLGEVF_RSS_HASH_ALGO_SIMPLE;
21372138
memcpy(rss_cfg->rss_hash_key, hclgevf_hash_key,
21382139
HCLGEVF_RSS_KEY_SIZE);
21392140

2141+
tuple_sets->ipv4_tcp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2142+
tuple_sets->ipv4_udp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2143+
tuple_sets->ipv4_sctp_en = HCLGEVF_RSS_INPUT_TUPLE_SCTP;
2144+
tuple_sets->ipv4_fragment_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2145+
tuple_sets->ipv6_tcp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2146+
tuple_sets->ipv6_udp_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2147+
tuple_sets->ipv6_sctp_en = HCLGEVF_RSS_INPUT_TUPLE_SCTP;
2148+
tuple_sets->ipv6_fragment_en = HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2149+
}
2150+
2151+
/* Initialize RSS indirect table */
2152+
for (i = 0; i < HCLGEVF_RSS_IND_TBL_SIZE; i++)
2153+
rss_cfg->rss_indirection_tbl[i] = i % rss_cfg->rss_size;
2154+
}
2155+
2156+
static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)
2157+
{
2158+
struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg;
2159+
int ret;
2160+
2161+
if (hdev->pdev->revision >= 0x21) {
21402162
ret = hclgevf_set_rss_algo_key(hdev, rss_cfg->hash_algo,
21412163
rss_cfg->rss_hash_key);
21422164
if (ret)
21432165
return ret;
21442166

2145-
rss_cfg->rss_tuple_sets.ipv4_tcp_en =
2146-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2147-
rss_cfg->rss_tuple_sets.ipv4_udp_en =
2148-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2149-
rss_cfg->rss_tuple_sets.ipv4_sctp_en =
2150-
HCLGEVF_RSS_INPUT_TUPLE_SCTP;
2151-
rss_cfg->rss_tuple_sets.ipv4_fragment_en =
2152-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2153-
rss_cfg->rss_tuple_sets.ipv6_tcp_en =
2154-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2155-
rss_cfg->rss_tuple_sets.ipv6_udp_en =
2156-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2157-
rss_cfg->rss_tuple_sets.ipv6_sctp_en =
2158-
HCLGEVF_RSS_INPUT_TUPLE_SCTP;
2159-
rss_cfg->rss_tuple_sets.ipv6_fragment_en =
2160-
HCLGEVF_RSS_INPUT_TUPLE_OTHER;
2161-
21622167
ret = hclgevf_set_rss_input_tuple(hdev, rss_cfg);
21632168
if (ret)
21642169
return ret;
21652170
}
21662171

2167-
/* Initialize RSS indirect table */
2168-
for (i = 0; i < HCLGEVF_RSS_IND_TBL_SIZE; i++)
2169-
rss_cfg->rss_indirection_tbl[i] = i % rss_cfg->rss_size;
2170-
21712172
ret = hclgevf_set_rss_indir_table(hdev);
21722173
if (ret)
21732174
return ret;
@@ -2764,6 +2765,7 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
27642765
goto err_config;
27652766

27662767
/* Initialize RSS for this VF */
2768+
hclgevf_rss_init_cfg(hdev);
27672769
ret = hclgevf_rss_init_hw(hdev);
27682770
if (ret) {
27692771
dev_err(&hdev->pdev->dev,
@@ -2936,6 +2938,8 @@ static int hclgevf_set_channels(struct hnae3_handle *handle, u32 new_tqps_num,
29362938
for (i = 0; i < HCLGEVF_RSS_IND_TBL_SIZE; i++)
29372939
rss_indir[i] = i % kinfo->rss_size;
29382940

2941+
hdev->rss_cfg.rss_size = kinfo->rss_size;
2942+
29392943
ret = hclgevf_set_rss(handle, rss_indir, NULL, 0);
29402944
if (ret)
29412945
dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n",

0 commit comments

Comments
 (0)