net: hns3: add calling roce callback function when link status change
authorPeng Li <lipeng321@huawei.com>
Tue, 22 Jan 2019 23:39:27 +0000 (07:39 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Jan 2019 19:13:01 +0000 (11:13 -0800)
This patch adds calling roce callback function when link status
change.

Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

index 00d7acb4d45abd46391c1dcdd502bbb6c64265a3..35fb0c54b9867d391cbfd7ff8e768ea355c5f6ff 100644 (file)
@@ -2105,7 +2105,9 @@ static int hclge_get_mac_phy_link(struct hclge_dev *hdev)
 
 static void hclge_update_link_status(struct hclge_dev *hdev)
 {
+       struct hnae3_client *rclient = hdev->roce_client;
        struct hnae3_client *client = hdev->nic_client;
+       struct hnae3_handle *rhandle;
        struct hnae3_handle *handle;
        int state;
        int i;
@@ -2117,6 +2119,10 @@ static void hclge_update_link_status(struct hclge_dev *hdev)
                for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
                        handle = &hdev->vport[i].nic;
                        client->ops->link_status_change(handle, state);
+                       rhandle = &hdev->vport[i].roce;
+                       if (rclient && rclient->ops->link_status_change)
+                               rclient->ops->link_status_change(rhandle,
+                                                                state);
                }
                hdev->hw.mac.link = state;
        }
index bb9f45200ef5e1bfe0edb99ae5fb351b6087a61d..989f08377d583acaebcd8601608909c97eed1e3d 100644 (file)
@@ -349,16 +349,21 @@ static void hclgevf_request_link_info(struct hclgevf_dev *hdev)
 
 void hclgevf_update_link_status(struct hclgevf_dev *hdev, int link_state)
 {
+       struct hnae3_handle *rhandle = &hdev->roce;
        struct hnae3_handle *handle = &hdev->nic;
+       struct hnae3_client *rclient;
        struct hnae3_client *client;
 
        client = handle->client;
+       rclient = hdev->roce_client;
 
        link_state =
                test_bit(HCLGEVF_STATE_DOWN, &hdev->state) ? 0 : link_state;
 
        if (link_state != hdev->hw.mac.link) {
                client->ops->link_status_change(handle, !!link_state);
+               if (rclient && rclient->ops->link_status_change)
+                       rclient->ops->link_status_change(rhandle, !!link_state);
                hdev->hw.mac.link = link_state;
        }
 }