Skip to content

Commit 393ceeb

Browse files
author
Paolo Abeni
committed
Merge branch 'there-are-some-bugfix-for-the-hns3-ethernet-driver'
Jijie Shao says: ==================== There are some bugfix for the HNS3 ethernet driver ==================== Link: https://lore.kernel.org/r/20240507134224.2646246-1-shaojijie@huawei.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents 2ddc0dd + 35d92ab commit 393ceeb

File tree

6 files changed

+47
-41
lines changed

6 files changed

+47
-41
lines changed

drivers/net/ethernet/hisilicon/hns3/hnae3.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ struct hnae3_handle {
897897
struct hnae3_roce_private_info rinfo;
898898
};
899899

900-
u32 numa_node_mask; /* for multi-chip support */
900+
nodemask_t numa_node_mask; /* for multi-chip support */
901901

902902
enum hnae3_port_base_vlan_state port_base_vlan_state;
903903

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

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,6 +1537,9 @@ static int hclge_configure(struct hclge_dev *hdev)
15371537
cfg.default_speed, ret);
15381538
return ret;
15391539
}
1540+
hdev->hw.mac.req_speed = hdev->hw.mac.speed;
1541+
hdev->hw.mac.req_autoneg = AUTONEG_ENABLE;
1542+
hdev->hw.mac.req_duplex = DUPLEX_FULL;
15401543

15411544
hclge_parse_link_mode(hdev, cfg.speed_ability);
15421545

@@ -1766,7 +1769,8 @@ static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
17661769

17671770
nic->pdev = hdev->pdev;
17681771
nic->ae_algo = &ae_algo;
1769-
nic->numa_node_mask = hdev->numa_node_mask;
1772+
bitmap_copy(nic->numa_node_mask.bits, hdev->numa_node_mask.bits,
1773+
MAX_NUMNODES);
17701774
nic->kinfo.io_base = hdev->hw.hw.io_base;
17711775

17721776
ret = hclge_knic_setup(vport, num_tqps,
@@ -2458,7 +2462,8 @@ static int hclge_init_roce_base_info(struct hclge_vport *vport)
24582462

24592463
roce->pdev = nic->pdev;
24602464
roce->ae_algo = nic->ae_algo;
2461-
roce->numa_node_mask = nic->numa_node_mask;
2465+
bitmap_copy(roce->numa_node_mask.bits, nic->numa_node_mask.bits,
2466+
MAX_NUMNODES);
24622467

24632468
return 0;
24642469
}
@@ -3342,9 +3347,9 @@ hclge_set_phy_link_ksettings(struct hnae3_handle *handle,
33423347
return ret;
33433348
}
33443349

3345-
hdev->hw.mac.autoneg = cmd->base.autoneg;
3346-
hdev->hw.mac.speed = cmd->base.speed;
3347-
hdev->hw.mac.duplex = cmd->base.duplex;
3350+
hdev->hw.mac.req_autoneg = cmd->base.autoneg;
3351+
hdev->hw.mac.req_speed = cmd->base.speed;
3352+
hdev->hw.mac.req_duplex = cmd->base.duplex;
33483353
linkmode_copy(hdev->hw.mac.advertising, cmd->link_modes.advertising);
33493354

33503355
return 0;
@@ -3377,9 +3382,9 @@ static int hclge_tp_port_init(struct hclge_dev *hdev)
33773382
if (!hnae3_dev_phy_imp_supported(hdev))
33783383
return 0;
33793384

3380-
cmd.base.autoneg = hdev->hw.mac.autoneg;
3381-
cmd.base.speed = hdev->hw.mac.speed;
3382-
cmd.base.duplex = hdev->hw.mac.duplex;
3385+
cmd.base.autoneg = hdev->hw.mac.req_autoneg;
3386+
cmd.base.speed = hdev->hw.mac.req_speed;
3387+
cmd.base.duplex = hdev->hw.mac.req_duplex;
33833388
linkmode_copy(cmd.link_modes.advertising, hdev->hw.mac.advertising);
33843389

33853390
return hclge_set_phy_link_ksettings(&hdev->vport->nic, &cmd);
@@ -7952,8 +7957,7 @@ static void hclge_set_timer_task(struct hnae3_handle *handle, bool enable)
79527957
/* Set the DOWN flag here to disable link updating */
79537958
set_bit(HCLGE_STATE_DOWN, &hdev->state);
79547959

7955-
/* flush memory to make sure DOWN is seen by service task */
7956-
smp_mb__before_atomic();
7960+
smp_mb__after_atomic(); /* flush memory to make sure DOWN is seen by service task */
79577961
hclge_flush_link_update(hdev);
79587962
}
79597963
}
@@ -9906,6 +9910,7 @@ static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev)
99069910
static int hclge_init_vlan_filter(struct hclge_dev *hdev)
99079911
{
99089912
struct hclge_vport *vport;
9913+
bool enable = true;
99099914
int ret;
99109915
int i;
99119916

@@ -9925,8 +9930,12 @@ static int hclge_init_vlan_filter(struct hclge_dev *hdev)
99259930
vport->cur_vlan_fltr_en = true;
99269931
}
99279932

9933+
if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps) &&
9934+
!test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, hdev->ae_dev->caps))
9935+
enable = false;
9936+
99289937
return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
9929-
HCLGE_FILTER_FE_INGRESS, true, 0);
9938+
HCLGE_FILTER_FE_INGRESS, enable, 0);
99309939
}
99319940

99329941
static int hclge_init_vlan_type(struct hclge_dev *hdev)
@@ -11622,16 +11631,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1162211631
if (ret)
1162311632
goto out;
1162411633

11625-
ret = hclge_devlink_init(hdev);
11626-
if (ret)
11627-
goto err_pci_uninit;
11628-
11629-
devl_lock(hdev->devlink);
11630-
1163111634
/* Firmware command queue initialize */
1163211635
ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw);
1163311636
if (ret)
11634-
goto err_devlink_uninit;
11637+
goto err_pci_uninit;
1163511638

1163611639
/* Firmware command initialize */
1163711640
ret = hclge_comm_cmd_init(hdev->ae_dev, &hdev->hw.hw, &hdev->fw_version,
@@ -11759,7 +11762,7 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1175911762

1176011763
ret = hclge_update_port_info(hdev);
1176111764
if (ret)
11762-
goto err_mdiobus_unreg;
11765+
goto err_ptp_uninit;
1176311766

1176411767
INIT_KFIFO(hdev->mac_tnl_log);
1176511768

@@ -11799,17 +11802,21 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1179911802
dev_warn(&pdev->dev,
1180011803
"failed to wake on lan init, ret = %d\n", ret);
1180111804

11805+
ret = hclge_devlink_init(hdev);
11806+
if (ret)
11807+
goto err_ptp_uninit;
11808+
1180211809
hclge_state_init(hdev);
1180311810
hdev->last_reset_time = jiffies;
1180411811

1180511812
dev_info(&hdev->pdev->dev, "%s driver initialization finished.\n",
1180611813
HCLGE_DRIVER_NAME);
1180711814

1180811815
hclge_task_schedule(hdev, round_jiffies_relative(HZ));
11809-
11810-
devl_unlock(hdev->devlink);
1181111816
return 0;
1181211817

11818+
err_ptp_uninit:
11819+
hclge_ptp_uninit(hdev);
1181311820
err_mdiobus_unreg:
1181411821
if (hdev->hw.mac.phydev)
1181511822
mdiobus_unregister(hdev->hw.mac.mdio_bus);
@@ -11819,9 +11826,6 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1181911826
pci_free_irq_vectors(pdev);
1182011827
err_cmd_uninit:
1182111828
hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw);
11822-
err_devlink_uninit:
11823-
devl_unlock(hdev->devlink);
11824-
hclge_devlink_uninit(hdev);
1182511829
err_pci_uninit:
1182611830
pcim_iounmap(pdev, hdev->hw.hw.io_base);
1182711831
pci_release_regions(pdev);

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,14 @@ struct hclge_mac {
279279
u8 media_type; /* port media type, e.g. fibre/copper/backplane */
280280
u8 mac_addr[ETH_ALEN];
281281
u8 autoneg;
282+
u8 req_autoneg;
282283
u8 duplex;
284+
u8 req_duplex;
283285
u8 support_autoneg;
284286
u8 speed_type; /* 0: sfp speed, 1: active speed */
285287
u8 lane_num;
286288
u32 speed;
289+
u32 req_speed;
287290
u32 max_speed;
288291
u32 speed_ability; /* speed ability supported by current media */
289292
u32 module_type; /* sub media type, e.g. kr/cr/sr/lr */
@@ -891,7 +894,7 @@ struct hclge_dev {
891894

892895
u16 fdir_pf_filter_count; /* Num of guaranteed filters for this PF */
893896
u16 num_alloc_vport; /* Num vports this driver supports */
894-
u32 numa_node_mask;
897+
nodemask_t numa_node_mask;
895898
u16 rx_buf_len;
896899
u16 num_tx_desc; /* desc num of per tx queue */
897900
u16 num_rx_desc; /* desc num of per rx queue */

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,12 +1077,13 @@ static void hclge_mbx_request_handling(struct hclge_mbx_ops_param *param)
10771077

10781078
hdev = param->vport->back;
10791079
cmd_func = hclge_mbx_ops_list[param->req->msg.code];
1080-
if (cmd_func)
1081-
ret = cmd_func(param);
1082-
else
1080+
if (!cmd_func) {
10831081
dev_err(&hdev->pdev->dev,
10841082
"un-supported mailbox message, code = %u\n",
10851083
param->req->msg.code);
1084+
return;
1085+
}
1086+
ret = cmd_func(param);
10861087

10871088
/* PF driver should not reply IMP */
10881089
if (hnae3_get_bit(param->req->mbx_need_resp, HCLGE_MBX_NEED_RESP_B) &&

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,8 @@ static int hclgevf_set_handle_info(struct hclgevf_dev *hdev)
412412

413413
nic->ae_algo = &ae_algovf;
414414
nic->pdev = hdev->pdev;
415-
nic->numa_node_mask = hdev->numa_node_mask;
415+
bitmap_copy(nic->numa_node_mask.bits, hdev->numa_node_mask.bits,
416+
MAX_NUMNODES);
416417
nic->flags |= HNAE3_SUPPORT_VF;
417418
nic->kinfo.io_base = hdev->hw.hw.io_base;
418419

@@ -2082,8 +2083,8 @@ static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev)
20822083

20832084
roce->pdev = nic->pdev;
20842085
roce->ae_algo = nic->ae_algo;
2085-
roce->numa_node_mask = nic->numa_node_mask;
2086-
2086+
bitmap_copy(roce->numa_node_mask.bits, nic->numa_node_mask.bits,
2087+
MAX_NUMNODES);
20872088
return 0;
20882089
}
20892090

@@ -2180,8 +2181,7 @@ static void hclgevf_set_timer_task(struct hnae3_handle *handle, bool enable)
21802181
} else {
21812182
set_bit(HCLGEVF_STATE_DOWN, &hdev->state);
21822183

2183-
/* flush memory to make sure DOWN is seen by service task */
2184-
smp_mb__before_atomic();
2184+
smp_mb__after_atomic(); /* flush memory to make sure DOWN is seen by service task */
21852185
hclgevf_flush_link_update(hdev);
21862186
}
21872187
}
@@ -2845,10 +2845,6 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
28452845
if (ret)
28462846
return ret;
28472847

2848-
ret = hclgevf_devlink_init(hdev);
2849-
if (ret)
2850-
goto err_devlink_init;
2851-
28522848
ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw);
28532849
if (ret)
28542850
goto err_cmd_queue_init;
@@ -2941,6 +2937,10 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
29412937

29422938
hclgevf_init_rxd_adv_layout(hdev);
29432939

2940+
ret = hclgevf_devlink_init(hdev);
2941+
if (ret)
2942+
goto err_config;
2943+
29442944
set_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state);
29452945

29462946
hdev->last_reset_time = jiffies;
@@ -2960,8 +2960,6 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
29602960
err_cmd_init:
29612961
hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw);
29622962
err_cmd_queue_init:
2963-
hclgevf_devlink_uninit(hdev);
2964-
err_devlink_init:
29652963
hclgevf_pci_uninit(hdev);
29662964
clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state);
29672965
return ret;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ struct hclgevf_dev {
236236
u16 rss_size_max; /* HW defined max RSS task queue */
237237

238238
u16 num_alloc_vport; /* num vports this driver supports */
239-
u32 numa_node_mask;
239+
nodemask_t numa_node_mask;
240240
u16 rx_buf_len;
241241
u16 num_tx_desc; /* desc num of per tx queue */
242242
u16 num_rx_desc; /* desc num of per rx queue */

0 commit comments

Comments
 (0)