Message ID | 20230807113452.474224-4-shaojijie@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 6265e242f7b95f2c1195b42ec912b84ad161470e |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | There are some bugfix for the HNS3 ethernet driver | expand |
On Mon, Aug 07, 2023 at 07:34:51PM +0800, Jijie Shao wrote: > From: Jie Wang <wangjie125@huawei.com> > > In some configure flow of hns3 driver, for example, change mtu, it will > disable MAC through firmware before configuration. But firmware disables > MAC asynchronously. The rx traffic may be not stopped in this case. > > So fixes it by waiting until mac link is down. > > Fixes: a9775bb64aa7 ("net: hns3: fix set and get link ksettings issue") > Signed-off-by: Jie Wang <wangjie125@huawei.com> > Signed-off-by: Jijie Shao <shaojijie@huawei.com> > --- > .../net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > Thanks, Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index b440e42e1d9c..a940e35aef29 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -7560,6 +7560,8 @@ static void hclge_enable_fd(struct hnae3_handle *handle, bool enable) static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable) { +#define HCLGE_LINK_STATUS_WAIT_CNT 3 + struct hclge_desc desc; struct hclge_config_mac_mode_cmd *req = (struct hclge_config_mac_mode_cmd *)desc.data; @@ -7584,9 +7586,15 @@ static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable) req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en); ret = hclge_cmd_send(&hdev->hw, &desc, 1); - if (ret) + if (ret) { dev_err(&hdev->pdev->dev, "mac enable fail, ret =%d.\n", ret); + return; + } + + if (!enable) + hclge_mac_link_status_wait(hdev, HCLGE_LINK_STATUS_DOWN, + HCLGE_LINK_STATUS_WAIT_CNT); } static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,