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 | --- |
4 | net: hns3: fix spelling mistake "reg_um" -> "reg_num" | 4 | changeLog: |
5 | v3 -> v4: | ||
6 | - Fixed an unclear sentence in commit log, suggested by Michal Kubiak | ||
7 | - Used devl_lock to disallow reload to race with initialization, suggested by Jiri Pirko | ||
8 | v3: https://lore.kernel.org/all/20240318132948.3624333-1-shaojijie@huawei.com/ | ||
9 | v2 -> v3: | ||
10 | - Fixed a syntax error in commit log, suggested by Ratheesh Kannoth | ||
11 | v2: https://lore.kernel.org/all/20240316111057.277591-1-shaojijie@huawei.com/ | ||
12 | v1 -> v2: | ||
13 | - Fixed some syntax errors in commit log and comments, suggested by Michal Kubiak | ||
14 | - Optimized the code by using a flag, suggested by Michal Kubiak | ||
15 | v1: https://lore.kernel.org/all/20240315100748.2913882-1-shaojijie@huawei.com/ | ||
16 | --- | ||
5 | 17 | ||
6 | Jian Shen (1): | 18 | Jian Shen (1): |
7 | net: hns3: store rx VLAN tag offload state for VF | 19 | net: hns3: mark unexcuted loopback test result as UNEXECUTED |
20 | |||
21 | Jie Wang (1): | ||
22 | net: hns3: fix index limit to support all queue stats | ||
8 | 23 | ||
9 | Yonglong Liu (1): | 24 | Yonglong Liu (1): |
10 | net: hns3: fix a use of uninitialized variable problem | 25 | net: hns3: fix kernel crash when devlink reload during pf |
26 | initialization | ||
11 | 27 | ||
12 | .../hisilicon/hns3/hns3pf/hclge_main.c | 2 +- | 28 | .../hns3/hns3_common/hclge_comm_tqp_stats.c | 2 +- |
13 | .../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++----- | 29 | .../ethernet/hisilicon/hns3/hns3_ethtool.c | 19 +++++++++++++++++-- |
14 | .../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++- | 30 | .../hisilicon/hns3/hns3pf/hclge_main.c | 4 ++++ |
15 | .../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++--------- | 31 | 3 files changed, 22 insertions(+), 3 deletions(-) |
16 | 4 files changed, 36 insertions(+), 21 deletions(-) | ||
17 | 32 | ||
18 | -- | 33 | -- |
19 | 2.33.0 | 34 | 2.30.0 | diff view generated by jsdifflib |
1 | From: Hao Lan <lanhao@huawei.com> | 1 | From: Jie Wang <wangjie125@huawei.com> |
---|---|---|---|
2 | 2 | ||
3 | There are spelling mistakes in hclgevf_get_regs. Fix them. | 3 | Currently, hns hardware supports more than 512 queues and the index limit |
4 | in hclge_comm_tqps_update_stats is wrong. So this patch removes it. | ||
4 | 5 | ||
5 | Signed-off-by: Hao Lan <lanhao@huawei.com> | 6 | Fixes: 287db5c40d15 ("net: hns3: create new set of common tqp stats APIs for PF and VF reuse") |
7 | Signed-off-by: Jie Wang <wangjie125@huawei.com> | ||
6 | Signed-off-by: Jijie Shao <shaojijie@huawei.com> | 8 | Signed-off-by: Jijie Shao <shaojijie@huawei.com> |
9 | Reviewed-by: Michal Kubiak <michal.kubiak@intel.com> | ||
10 | Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> | ||
7 | --- | 11 | --- |
8 | .../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++--------- | 12 | .../ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c | 2 +- |
9 | 1 file changed, 14 insertions(+), 13 deletions(-) | 13 | 1 file changed, 1 insertion(+), 1 deletion(-) |
10 | 14 | ||
11 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c | 15 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c |
12 | index XXXXXXX..XXXXXXX 100644 | 16 | index XXXXXXX..XXXXXXX 100644 |
13 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c | 17 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c |
14 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c | 18 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c |
15 | @@ -XXX,XX +XXX,XX @@ void hclgevf_get_regs(struct hnae3_handle *handle, u32 *version, | 19 | @@ -XXX,XX +XXX,XX @@ int hclge_comm_tqps_update_stats(struct hnae3_handle *handle, |
16 | 20 | hclge_comm_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_TX_STATS, | |
17 | struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); | 21 | true); |
18 | struct hnae3_queue *tqp; | 22 | |
19 | - int i, j, reg_um; | 23 | - desc.data[0] = cpu_to_le32(tqp->index & 0x1ff); |
20 | + int i, j, reg_num; | 24 | + desc.data[0] = cpu_to_le32(tqp->index); |
21 | u32 *reg = data; | 25 | ret = hclge_comm_cmd_send(hw, &desc, 1); |
22 | 26 | if (ret) { | |
23 | *version = hdev->fw_version; | 27 | dev_err(&hw->cmq.csq.pdev->dev, |
24 | reg += hclgevf_reg_get_header(reg); | ||
25 | |||
26 | /* fetching per-VF registers values from VF PCIe register space */ | ||
27 | - reg_um = ARRAY_SIZE(cmdq_reg_addr_list); | ||
28 | - reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_um, reg); | ||
29 | - for (i = 0; i < reg_um; i++) | ||
30 | + reg_num = ARRAY_SIZE(cmdq_reg_addr_list); | ||
31 | + reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_num, reg); | ||
32 | + for (i = 0; i < reg_num; i++) | ||
33 | *reg++ = hclgevf_read_dev(&hdev->hw, cmdq_reg_addr_list[i]); | ||
34 | |||
35 | - reg_um = ARRAY_SIZE(common_reg_addr_list); | ||
36 | - reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_um, reg); | ||
37 | - for (i = 0; i < reg_um; i++) | ||
38 | + reg_num = ARRAY_SIZE(common_reg_addr_list); | ||
39 | + reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_num, reg); | ||
40 | + for (i = 0; i < reg_num; i++) | ||
41 | *reg++ = hclgevf_read_dev(&hdev->hw, common_reg_addr_list[i]); | ||
42 | |||
43 | - reg_um = ARRAY_SIZE(ring_reg_addr_list); | ||
44 | + reg_num = ARRAY_SIZE(ring_reg_addr_list); | ||
45 | for (j = 0; j < hdev->num_tqps; j++) { | ||
46 | - reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_RING, reg_um, reg); | ||
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 | } | ||
55 | |||
56 | - reg_um = ARRAY_SIZE(tqp_intr_reg_addr_list); | ||
57 | + reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list); | ||
58 | for (j = 0; j < hdev->num_msi_used - 1; j++) { | ||
59 | - reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR, reg_um, reg); | ||
60 | - for (i = 0; i < reg_um; i++) | ||
61 | + reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR, | ||
62 | + reg_num, reg); | ||
63 | + for (i = 0; i < reg_num; i++) | ||
64 | *reg++ = hclgevf_read_dev(&hdev->hw, | ||
65 | tqp_intr_reg_addr_list[i] + | ||
66 | HCLGEVF_RING_INT_REG_OFFSET * j); | ||
67 | -- | 28 | -- |
68 | 2.33.0 | 29 | 2.30.0 | diff view generated by jsdifflib |
1 | From: Yonglong Liu <liuyonglong@huawei.com> | 1 | From: Yonglong Liu <liuyonglong@huawei.com> |
---|---|---|---|
2 | 2 | ||
3 | In hclge_add_fd_entry(), if the flow type is FLOW_EXT, and the data of | 3 | The devlink reload process will access the hardware resources, |
4 | m_ext is all zero, then some members of the local variable "info" are | 4 | but the register operation is done before the hardware is initialized. |
5 | not initialized. | 5 | So, processing the devlink reload during initialization may lead to kernel |
6 | crash. This patch fixes this by taking devl_lock during initialization. | ||
6 | 7 | ||
7 | Fixes: 67b0e1428e2f ("net: hns3: add support for user-def data of flow director") | 8 | Fixes: b741269b2759 ("net: hns3: add support for registering devlink for PF") |
8 | Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> | 9 | 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 | 4 ++++ |
12 | 1 file changed, 1 insertion(+), 1 deletion(-) | 13 | 1 file changed, 4 insertions(+) |
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 int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) |
19 | struct ethtool_rxnfc *cmd) | 20 | if (ret) |
20 | { | 21 | goto err_pci_uninit; |
21 | struct hclge_vport *vport = hclge_get_vport(handle); | 22 | |
22 | + struct hclge_fd_user_def_info info = {0}; | 23 | + devl_lock(hdev->devlink); |
23 | struct hclge_dev *hdev = vport->back; | 24 | + |
24 | - struct hclge_fd_user_def_info info; | 25 | /* Firmware command queue initialize */ |
25 | u16 dst_vport_id = 0, q_index = 0; | 26 | ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw); |
26 | struct ethtool_rx_flow_spec *fs; | 27 | if (ret) |
27 | struct hclge_fd_rule *rule; | 28 | @@ -XXX,XX +XXX,XX @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) |
29 | |||
30 | hclge_task_schedule(hdev, round_jiffies_relative(HZ)); | ||
31 | |||
32 | + devl_unlock(hdev->devlink); | ||
33 | return 0; | ||
34 | |||
35 | err_mdiobus_unreg: | ||
36 | @@ -XXX,XX +XXX,XX @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) | ||
37 | err_cmd_uninit: | ||
38 | hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw); | ||
39 | err_devlink_uninit: | ||
40 | + devl_unlock(hdev->devlink); | ||
41 | hclge_devlink_uninit(hdev); | ||
42 | err_pci_uninit: | ||
43 | pcim_iounmap(pdev, hdev->hw.hw.io_base); | ||
28 | -- | 44 | -- |
29 | 2.33.0 | 45 | 2.30.0 | diff view generated by jsdifflib |
1 | From: Jian Shen <shenjian15@huawei.com> | 1 | From: Jian Shen <shenjian15@huawei.com> |
---|---|---|---|
2 | 2 | ||
3 | The VF driver missed to store the rx VLAN tag strip state when | 3 | Currently, loopback test may be skipped when resetting, but the test |
4 | user change the rx VLAN tag offload state. And it will default | 4 | result will still show as 'PASS', because the driver doesn't set |
5 | to enable the rx vlan tag strip when re-init VF device after | 5 | ETH_TEST_FL_FAILED flag. Fix it by setting the flag and |
6 | reset. So if user disable rx VLAN tag offload, and trig reset, | 6 | initializating the value to UNEXECUTED. |
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 | Fixes: 4c8dab1c709c ("net: hns3: reconstruct function hns3_self_test") |
12 | Signed-off-by: Jian Shen <shenjian15@huawei.com> | 9 | Signed-off-by: Jian Shen <shenjian15@huawei.com> |
13 | Signed-off-by: Jijie Shao <shaojijie@huawei.com> | 10 | Signed-off-by: Jijie Shao <shaojijie@huawei.com> |
11 | Reviewed-by: Michal Kubiak <michal.kubiak@intel.com> | ||
14 | --- | 12 | --- |
15 | .../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++++----- | 13 | .../ethernet/hisilicon/hns3/hns3_ethtool.c | 19 +++++++++++++++++-- |
16 | .../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++- | 14 | 1 file changed, 17 insertions(+), 2 deletions(-) |
17 | 2 files changed, 21 insertions(+), 7 deletions(-) | ||
18 | 15 | ||
19 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 16 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
20 | index XXXXXXX..XXXXXXX 100644 | 17 | index XXXXXXX..XXXXXXX 100644 |
21 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 18 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
22 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 19 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
23 | @@ -XXX,XX +XXX,XX @@ static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev) | 20 | @@ -XXX,XX +XXX,XX @@ static const struct hns3_stats hns3_rxq_stats[] = { |
24 | rtnl_unlock(); | 21 | #define HNS3_NIC_LB_TEST_NO_MEM_ERR 1 |
22 | #define HNS3_NIC_LB_TEST_TX_CNT_ERR 2 | ||
23 | #define HNS3_NIC_LB_TEST_RX_CNT_ERR 3 | ||
24 | +#define HNS3_NIC_LB_TEST_UNEXECUTED 4 | ||
25 | + | ||
26 | +static int hns3_get_sset_count(struct net_device *netdev, int stringset); | ||
27 | |||
28 | static int hns3_lp_setup(struct net_device *ndev, enum hnae3_loop loop, bool en) | ||
29 | { | ||
30 | @@ -XXX,XX +XXX,XX @@ static void hns3_do_external_lb(struct net_device *ndev, | ||
31 | static void hns3_self_test(struct net_device *ndev, | ||
32 | struct ethtool_test *eth_test, u64 *data) | ||
33 | { | ||
34 | + int cnt = hns3_get_sset_count(ndev, ETH_SS_TEST); | ||
35 | struct hns3_nic_priv *priv = netdev_priv(ndev); | ||
36 | struct hnae3_handle *h = priv->ae_handle; | ||
37 | int st_param[HNAE3_LOOP_NONE][2]; | ||
38 | bool if_running = netif_running(ndev); | ||
39 | + int i; | ||
40 | + | ||
41 | + /* initialize the loopback test result, avoid marking an unexcuted | ||
42 | + * loopback test as PASS. | ||
43 | + */ | ||
44 | + for (i = 0; i < cnt; i++) | ||
45 | + data[i] = HNS3_NIC_LB_TEST_UNEXECUTED; | ||
46 | |||
47 | if (hns3_nic_resetting(ndev)) { | ||
48 | netdev_err(ndev, "dev resetting!"); | ||
49 | - return; | ||
50 | + goto failure; | ||
51 | } | ||
52 | |||
53 | if (!(eth_test->flags & ETH_TEST_FL_OFFLINE)) | ||
54 | - return; | ||
55 | + goto failure; | ||
56 | |||
57 | if (netif_msg_ifdown(h)) | ||
58 | netdev_info(ndev, "self test start\n"); | ||
59 | @@ -XXX,XX +XXX,XX @@ static void hns3_self_test(struct net_device *ndev, | ||
60 | |||
61 | if (netif_msg_ifdown(h)) | ||
62 | netdev_info(ndev, "self test end\n"); | ||
63 | + return; | ||
64 | + | ||
65 | +failure: | ||
66 | + eth_test->flags |= ETH_TEST_FL_FAILED; | ||
25 | } | 67 | } |
26 | 68 | ||
27 | -static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable) | 69 | static void hns3_update_limit_promisc_mode(struct net_device *netdev, |
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 | -- | 70 | -- |
103 | 2.33.0 | 71 | 2.30.0 | diff view generated by jsdifflib |