Skip to content

Commit

Permalink
net: hns3: call roce's reset notify callback when resetting
Browse files Browse the repository at this point in the history
While doing resetting, roce should do its uninitailization part
before nic's, and do its initialization part after nic's.

Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Huazhong Tan authored and David S. Miller committed Nov 7, 2018
1 parent 35d93a3 commit f403a84
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2315,6 +2315,34 @@ static int hclge_notify_client(struct hclge_dev *hdev,
return 0;
}

static int hclge_notify_roce_client(struct hclge_dev *hdev,
enum hnae3_reset_notify_type type)
{
struct hnae3_client *client = hdev->roce_client;
int ret = 0;
u16 i;

if (!client)
return 0;

if (!client->ops->reset_notify)
return -EOPNOTSUPP;

for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
struct hnae3_handle *handle = &hdev->vport[i].roce;

ret = client->ops->reset_notify(handle, type);
if (ret) {
dev_err(&hdev->pdev->dev,
"notify roce client failed %d(%d)",
type, ret);
return ret;
}
}

return ret;
}

static int hclge_reset_wait(struct hclge_dev *hdev)
{
#define HCLGE_RESET_WATI_MS 100
Expand Down Expand Up @@ -2501,13 +2529,15 @@ static void hclge_reset(struct hclge_dev *hdev)
hdev->reset_count++;
hdev->last_reset_time = jiffies;
/* perform reset of the stack & ae device for a client */
hclge_notify_roce_client(hdev, HNAE3_DOWN_CLIENT);
rtnl_lock();
hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
rtnl_unlock();

hclge_reset_prepare_wait(hdev);

if (!hclge_reset_wait(hdev)) {
hclge_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT);
rtnl_lock();
hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
hclge_reset_ae_dev(hdev->ae_dev);
Expand All @@ -2524,6 +2554,9 @@ static void hclge_reset(struct hclge_dev *hdev)
hclge_notify_client(hdev, HNAE3_UP_CLIENT);
rtnl_unlock();
ae_dev->reset_type = HNAE3_NONE_RESET;

hclge_notify_roce_client(hdev, HNAE3_INIT_CLIENT);
hclge_notify_roce_client(hdev, HNAE3_UP_CLIENT);
}

static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
Expand Down

0 comments on commit f403a84

Please sign in to comment.