1
There are some bugfix for the HNS3 ethernet driver
1
There are some bugfix for the HNS3 ethernet driver
2
2
3
Hao Lan (1):
3
Jie Wang (2):
4
net: hns3: fix spelling mistake "reg_um" -> "reg_num"
4
net: hns3: fix a deadlock problem when config TC during resetting
5
net: hns3: fix wrong use of semaphore up
5
6
6
Jian Shen (1):
7
Peiyang Wang (3):
7
net: hns3: store rx VLAN tag offload state for VF
8
net: hns3: use the user's cfg after reset
9
net: hns3: void array out of bound when loop tnl_num
10
net: hns3: use correct release function during uninitialization
8
11
9
Yonglong Liu (1):
12
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 3 ++
10
net: hns3: fix a use of uninitialized variable problem
13
.../hisilicon/hns3/hns3pf/hclge_err.c | 6 ++--
11
14
.../hisilicon/hns3/hns3pf/hclge_main.c | 30 +++++++++++++------
12
.../hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
15
.../hisilicon/hns3/hns3pf/hclge_mdio.c | 3 ++
13
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++-----
16
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 4 +--
14
.../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++-
17
5 files changed, 32 insertions(+), 14 deletions(-)
15
.../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++---------
16
4 files changed, 36 insertions(+), 21 deletions(-)
17
18
18
--
19
--
19
2.33.0
20
2.33.0
diff view generated by jsdifflib
1
From: Jian Shen <shenjian15@huawei.com>
1
From: Jie Wang <wangjie125@huawei.com>
2
2
3
The VF driver missed to store the rx VLAN tag strip state when
3
Currently, if hns3 PF or VF FLR reset failed after five times retry,
4
user change the rx VLAN tag offload state. And it will default
4
the reset done process will directly release the semaphore
5
to enable the rx vlan tag strip when re-init VF device after
5
which has already released in hclge_reset_prepare_general.
6
reset. So if user disable rx VLAN tag offload, and trig reset,
6
This will cause down operation fail.
7
then the HW will still strip the VLAN tag from packet nad fill
8
into RX BD, but the VF driver will ignore it for rx VLAN tag
9
offload disabled. It may cause the rx VLAN tag dropped.
10
7
11
Fixes: b2641e2ad456 ("net: hns3: Add support of hardware rx-vlan-offload to HNS3 VF driver")
8
So this patch fixes it by adding reset state judgement. The up operation is
12
Signed-off-by: Jian Shen <shenjian15@huawei.com>
9
only called after successful PF FLR reset.
10
11
Fixes: 8627bdedc435 ("net: hns3: refactor the precedure of PF FLR")
12
Fixes: f28368bb4542 ("net: hns3: refactor the procedure of VF FLR")
13
Signed-off-by: Jie Wang <wangjie125@huawei.com>
13
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
14
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
14
---
15
---
15
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++++-----
16
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 4 ++--
16
.../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++-
17
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 ++--
17
2 files changed, 21 insertions(+), 7 deletions(-)
18
2 files changed, 4 insertions(+), 4 deletions(-)
18
19
20
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
21
index XXXXXXX..XXXXXXX 100644
22
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
23
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
24
@@ -XXX,XX +XXX,XX @@ static void hclge_reset_done(struct hnae3_ae_dev *ae_dev)
25
        dev_err(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", ret);
26
27
    hdev->reset_type = HNAE3_NONE_RESET;
28
-    clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
29
-    up(&hdev->reset_sem);
30
+    if (test_and_clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
31
+        up(&hdev->reset_sem);
32
}
33
34
static void hclge_clear_resetting_state(struct hclge_dev *hdev)
19
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
35
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
20
index XXXXXXX..XXXXXXX 100644
36
index XXXXXXX..XXXXXXX 100644
21
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
37
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
22
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
38
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
23
@@ -XXX,XX +XXX,XX @@ static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev)
39
@@ -XXX,XX +XXX,XX @@ static void hclgevf_reset_done(struct hnae3_ae_dev *ae_dev)
24
    rtnl_unlock();
40
             ret);
41
42
    hdev->reset_type = HNAE3_NONE_RESET;
43
-    clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state);
44
-    up(&hdev->reset_sem);
45
+    if (test_and_clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state))
46
+        up(&hdev->reset_sem);
25
}
47
}
26
48
27
-static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
49
static u32 hclgevf_get_fw_version(struct hnae3_handle *handle)
28
+static int hclgevf_en_hw_strip_rxvtag_cmd(struct hclgevf_dev *hdev, bool enable)
29
{
30
-    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
31
    struct hclge_vf_to_pf_msg send_msg;
32
33
    hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_VLAN,
34
@@ -XXX,XX +XXX,XX @@ static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
35
    return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0);
36
}
37
38
+static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
39
+{
40
+    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
41
+    int ret;
42
+
43
+    ret = hclgevf_en_hw_strip_rxvtag_cmd(hdev, enable);
44
+    if (ret)
45
+        return ret;
46
+
47
+    hdev->rxvtag_strip_en = enable;
48
+    return 0;
49
+}
50
+
51
static int hclgevf_reset_tqp(struct hnae3_handle *handle)
52
{
53
#define HCLGEVF_RESET_ALL_QUEUE_DONE    1U
54
@@ -XXX,XX +XXX,XX @@ static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)
55
                     tc_valid, tc_size);
56
}
57
58
-static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev)
59
+static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev,
60
+                 bool rxvtag_strip_en)
61
{
62
    struct hnae3_handle *nic = &hdev->nic;
63
    int ret;
64
65
-    ret = hclgevf_en_hw_strip_rxvtag(nic, true);
66
+    ret = hclgevf_en_hw_strip_rxvtag(nic, rxvtag_strip_en);
67
    if (ret) {
68
        dev_err(&hdev->pdev->dev,
69
            "failed to enable rx vlan offload, ret = %d\n", ret);
70
@@ -XXX,XX +XXX,XX @@ static int hclgevf_reset_hdev(struct hclgevf_dev *hdev)
71
    if (ret)
72
        return ret;
73
74
-    ret = hclgevf_init_vlan_config(hdev);
75
+    ret = hclgevf_init_vlan_config(hdev, hdev->rxvtag_strip_en);
76
    if (ret) {
77
        dev_err(&hdev->pdev->dev,
78
            "failed(%d) to initialize VLAN config\n", ret);
79
@@ -XXX,XX +XXX,XX @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
80
        goto err_config;
81
    }
82
83
-    ret = hclgevf_init_vlan_config(hdev);
84
+    ret = hclgevf_init_vlan_config(hdev, true);
85
    if (ret) {
86
        dev_err(&hdev->pdev->dev,
87
            "failed(%d) to initialize VLAN config\n", ret);
88
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
89
index XXXXXXX..XXXXXXX 100644
90
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
91
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
92
@@ -XXX,XX +XXX,XX @@ struct hclgevf_dev {
93
    u16 *vector_status;
94
    int *vector_irq;
95
96
-    bool gro_en;
97
+    u32 gro_en :1;
98
+    u32 rxvtag_strip_en :1;
99
100
    unsigned long vlan_del_fail_bmap[BITS_TO_LONGS(VLAN_N_VID)];
101
102
--
50
--
103
2.33.0
51
2.33.0
diff view generated by jsdifflib
1
From: Hao Lan <lanhao@huawei.com>
1
From: Peiyang Wang <wangpeiyang1@huawei.com>
2
2
3
There are spelling mistakes in hclgevf_get_regs. Fix them.
3
Consider the followed case that the user change speed and reset the net
4
interface. Before the hw change speed successfully, the driver get old
5
old speed from hw by timer task. After reset, the previous speed is config
6
to hw. As a result, the new speed is configed successfully but lost after
7
PF reset. The followed pictured shows more dirrectly.
4
8
5
Signed-off-by: Hao Lan <lanhao@huawei.com>
9
+------+ +----+ +----+
10
| USER | | PF | | HW |
11
+---+--+ +-+--+ +-+--+
12
| ethtool -s 100G | |
13
+------------------>| set speed 100G |
14
| +--------------------->|
15
| | set successfully |
16
| |<---------------------+---+
17
| |query cfg (timer task)| |
18
| +--------------------->| | handle speed
19
| | return 200G | | changing event
20
| ethtool --reset |<---------------------+ | (100G)
21
+------------------>| cfg previous speed |<--+
22
| | after reset (200G) |
23
| +--------------------->|
24
| | +---+
25
| |query cfg (timer task)| |
26
| +--------------------->| | handle speed
27
| | return 100G | | changing event
28
| |<---------------------+ | (200G)
29
| | |<--+
30
| |query cfg (timer task)|
31
| +--------------------->|
32
| | return 200G |
33
| |<---------------------+
34
| | |
35
v v v
36
37
This patch save new speed if hw change speed successfully, which will be
38
used after reset successfully.
39
40
Fixes: 2d03eacc0b7e ("net: hns3: Only update mac configuation when necessary")
41
Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
6
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
42
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
7
---
43
---
8
.../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++---------
44
.../hisilicon/hns3/hns3pf/hclge_main.c | 24 ++++++++++++++-----
9
1 file changed, 14 insertions(+), 13 deletions(-)
45
.../hisilicon/hns3/hns3pf/hclge_mdio.c | 3 +++
46
2 files changed, 21 insertions(+), 6 deletions(-)
10
47
11
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
48
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
12
index XXXXXXX..XXXXXXX 100644
49
index XXXXXXX..XXXXXXX 100644
13
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
50
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
14
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
51
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
15
@@ -XXX,XX +XXX,XX @@ void hclgevf_get_regs(struct hnae3_handle *handle, u32 *version,
52
@@ -XXX,XX +XXX,XX @@ static int hclge_cfg_mac_speed_dup_h(struct hnae3_handle *handle, int speed,
16
53
{
17
    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
54
    struct hclge_vport *vport = hclge_get_vport(handle);
18
    struct hnae3_queue *tqp;
55
    struct hclge_dev *hdev = vport->back;
19
-    int i, j, reg_um;
56
+    int ret;
20
+    int i, j, reg_num;
57
+
21
    u32 *reg = data;
58
+    ret = hclge_cfg_mac_speed_dup(hdev, speed, duplex, lane_num);
22
59
23
    *version = hdev->fw_version;
60
-    return hclge_cfg_mac_speed_dup(hdev, speed, duplex, lane_num);
24
    reg += hclgevf_reg_get_header(reg);
61
+    if (ret)
25
62
+        return ret;
26
    /* fetching per-VF registers values from VF PCIe register space */
63
+
27
-    reg_um = ARRAY_SIZE(cmdq_reg_addr_list);
64
+    hdev->hw.mac.req_speed = speed;
28
-    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_um, reg);
65
+    hdev->hw.mac.req_duplex = duplex;
29
-    for (i = 0; i < reg_um; i++)
66
+
30
+    reg_num = ARRAY_SIZE(cmdq_reg_addr_list);
67
+    return 0;
31
+    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_num, reg);
68
}
32
+    for (i = 0; i < reg_num; i++)
69
33
        *reg++ = hclgevf_read_dev(&hdev->hw, cmdq_reg_addr_list[i]);
70
static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
34
71
@@ -XXX,XX +XXX,XX @@ static int hclge_mac_init(struct hclge_dev *hdev)
35
-    reg_um = ARRAY_SIZE(common_reg_addr_list);
72
    if (!test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
36
-    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_um, reg);
73
        hdev->hw.mac.duplex = HCLGE_MAC_FULL;
37
-    for (i = 0; i < reg_um; i++)
74
38
+    reg_num = ARRAY_SIZE(common_reg_addr_list);
75
-    ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
39
+    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_num, reg);
76
-                     hdev->hw.mac.duplex, hdev->hw.mac.lane_num);
40
+    for (i = 0; i < reg_num; i++)
77
-    if (ret)
41
        *reg++ = hclgevf_read_dev(&hdev->hw, common_reg_addr_list[i]);
78
-        return ret;
42
79
-
43
-    reg_um = ARRAY_SIZE(ring_reg_addr_list);
80
    if (hdev->hw.mac.support_autoneg) {
44
+    reg_num = ARRAY_SIZE(ring_reg_addr_list);
81
        ret = hclge_set_autoneg_en(hdev, hdev->hw.mac.autoneg);
45
    for (j = 0; j < hdev->num_tqps; j++) {
82
        if (ret)
46
-        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_RING, reg_um, reg);
83
            return ret;
47
+        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_RING, reg_num, reg);
48
        tqp = &hdev->htqp[j].q;
49
-        for (i = 0; i < reg_um; i++)
50
+        for (i = 0; i < reg_num; i++)
51
            *reg++ = readl_relaxed(tqp->io_base -
52
                     HCLGEVF_TQP_REG_OFFSET +
53
                     ring_reg_addr_list[i]);
54
    }
84
    }
55
85
56
-    reg_um = ARRAY_SIZE(tqp_intr_reg_addr_list);
86
+    if (!hdev->hw.mac.autoneg) {
57
+    reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list);
87
+        ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.req_speed,
58
    for (j = 0; j < hdev->num_msi_used - 1; j++) {
88
+                         hdev->hw.mac.req_duplex,
59
-        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR, reg_um, reg);
89
+                         hdev->hw.mac.lane_num);
60
-        for (i = 0; i < reg_um; i++)
90
+        if (ret)
61
+        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR,
91
+            return ret;
62
+                     reg_num, reg);
92
+    }
63
+        for (i = 0; i < reg_num; i++)
93
+
64
            *reg++ = hclgevf_read_dev(&hdev->hw,
94
    mac->link = 0;
65
                         tqp_intr_reg_addr_list[i] +
95
66
                         HCLGEVF_RING_INT_REG_OFFSET * j);
96
    if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) {
97
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c
98
index XXXXXXX..XXXXXXX 100644
99
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c
100
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c
101
@@ -XXX,XX +XXX,XX @@ static void hclge_mac_adjust_link(struct net_device *netdev)
102
    if (ret)
103
        netdev_err(netdev, "failed to adjust link.\n");
104
105
+    hdev->hw.mac.req_speed = (u32)speed;
106
+    hdev->hw.mac.req_duplex = (u8)duplex;
107
+
108
    ret = hclge_cfg_flowctrl(hdev);
109
    if (ret)
110
        netdev_err(netdev, "failed to configure flow control.\n");
67
--
111
--
68
2.33.0
112
2.33.0
diff view generated by jsdifflib
New patch
1
From: Jie Wang <wangjie125@huawei.com>
1
2
3
When config TC during the reset process, may cause a deadlock, the flow is
4
as below:
5
pf reset start
6
7
8
......
9
setup tc │
10
│ ▼
11
▼ DOWN: napi_disable()
12
napi_disable()(skip) │
13
│ │
14
▼ ▼
15
...... ......
16
│ │
17
▼ │
18
napi_enable() │
19
20
UINIT: netif_napi_del()
21
22
23
......
24
25
26
INIT: netif_napi_add()
27
28
29
...... global reset start
30
│ │
31
▼ ▼
32
UP: napi_enable()(skip) ......
33
│ │
34
▼ ▼
35
...... napi_disable()
36
37
In reset process, the driver will DOWN the port and then UINIT, in this
38
case, the setup tc process will UP the port before UINIT, so cause the
39
problem. Adds a DOWN process in UINIT to fix it.
40
41
Fixes: bb6b94a896d4 ("net: hns3: Add reset interface implementation in client")
42
Signed-off-by: Jie Wang <wangjie125@huawei.com>
43
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
44
---
45
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 3 +++
46
1 file changed, 3 insertions(+)
47
48
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
49
index XXXXXXX..XXXXXXX 100644
50
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
51
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
52
@@ -XXX,XX +XXX,XX @@ static int hns3_reset_notify_uninit_enet(struct hnae3_handle *handle)
53
    struct net_device *netdev = handle->kinfo.netdev;
54
    struct hns3_nic_priv *priv = netdev_priv(netdev);
55
56
+    if (!test_bit(HNS3_NIC_STATE_DOWN, &priv->state))
57
+        hns3_nic_net_stop(netdev);
58
+
59
    if (!test_and_clear_bit(HNS3_NIC_STATE_INITED, &priv->state)) {
60
        netdev_warn(netdev, "already uninitialized\n");
61
        return 0;
62
--
63
2.33.0
64
diff view generated by jsdifflib
New patch
1
From: Peiyang Wang <wangpeiyang1@huawei.com>
1
2
3
When query reg inf of SSU, it loops tnl_num times. However, tnl_num comes
4
from hardware and the length of array is a fixed value. To void array out
5
of bound, make sure the loop time is not greater than the length of array
6
7
Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
8
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
9
---
10
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c | 6 +++---
11
1 file changed, 3 insertions(+), 3 deletions(-)
12
13
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
16
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
17
@@ -XXX,XX +XXX,XX @@ static void hclge_query_reg_info_of_ssu(struct hclge_dev *hdev)
18
{
19
    u32 loop_para[HCLGE_MOD_MSG_PARA_ARRAY_MAX_SIZE] = {0};
20
    struct hclge_mod_reg_common_msg msg;
21
-    u8 i, j, num;
22
-    u32 loop_time;
23
+    u8 i, j, num, loop_time;
24
25
    num = ARRAY_SIZE(hclge_ssu_reg_common_msg);
26
    for (i = 0; i < num; i++) {
27
@@ -XXX,XX +XXX,XX @@ static void hclge_query_reg_info_of_ssu(struct hclge_dev *hdev)
28
        loop_time = 1;
29
        loop_para[0] = 0;
30
        if (msg.need_para) {
31
-            loop_time = hdev->ae_dev->dev_specs.tnl_num;
32
+            loop_time = min(hdev->ae_dev->dev_specs.tnl_num,
33
+                    HCLGE_MOD_MSG_PARA_ARRAY_MAX_SIZE);
34
            for (j = 0; j < loop_time; j++)
35
                loop_para[j] = j + 1;
36
        }
37
--
38
2.33.0
diff view generated by jsdifflib
1
From: Yonglong Liu <liuyonglong@huawei.com>
1
From: Peiyang Wang <wangpeiyang1@huawei.com>
2
2
3
In hclge_add_fd_entry(), if the flow type is FLOW_EXT, and the data of
3
pci_request_regions is called to apply for PCI I/O and memory resources
4
m_ext is all zero, then some members of the local variable "info" are
4
when the driver is initialized, Therefore, when the driver is uninstalled,
5
not initialized.
5
pci_release_regions should be used to release PCI I/O and memory resources
6
instead of pci_release_mem_regions is used to release memory reasouces
7
only.
6
8
7
Fixes: 67b0e1428e2f ("net: hns3: add support for user-def data of flow director")
9
Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
8
Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
9
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
10
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
10
---
11
---
11
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
12
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
14
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
15
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
15
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
16
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
17
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
17
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
18
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
18
@@ -XXX,XX +XXX,XX @@ static int hclge_add_fd_entry(struct hnae3_handle *handle,
19
@@ -XXX,XX +XXX,XX @@ static void hclge_pci_uninit(struct hclge_dev *hdev)
19
             struct ethtool_rxnfc *cmd)
20
20
{
21
    pcim_iounmap(pdev, hdev->hw.hw.io_base);
21
    struct hclge_vport *vport = hclge_get_vport(handle);
22
    pci_free_irq_vectors(pdev);
22
+    struct hclge_fd_user_def_info info = {0};
23
-    pci_release_mem_regions(pdev);
23
    struct hclge_dev *hdev = vport->back;
24
+    pci_release_regions(pdev);
24
-    struct hclge_fd_user_def_info info;
25
    pci_disable_device(pdev);
25
    u16 dst_vport_id = 0, q_index = 0;
26
}
26
    struct ethtool_rx_flow_spec *fs;
27
27
    struct hclge_fd_rule *rule;
28
--
28
--
29
2.33.0
29
2.33.0
diff view generated by jsdifflib