net: hns3: fix mis-assignment to hdev->reset_level in hclge_reset
authorHuazhong Tan <tanhuazhong@huawei.com>
Thu, 5 Sep 2019 13:31:38 +0000 (21:31 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Sep 2019 13:20:34 +0000 (15:20 +0200)
Since hclge_get_reset_level may return HNAE3_NONE_RESET,
so hdev->reset_level can not be assigned with the return
value in the hclge_reset(), otherwise, it will cause
the use of hdev->reset_level in hclge_reset_event get
into error.

Fixes: 012fcb52f67c ("net: hns3: activate reset timer when calling reset_event")
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

index 0e1225c080204ae0c24f4090a3469b3dd7e6dc24..76e1c84c5776fc5907631b85424527e31cf433c1 100644 (file)
@@ -3619,6 +3619,7 @@ static int hclge_reset_stack(struct hclge_dev *hdev)
 static void hclge_reset(struct hclge_dev *hdev)
 {
        struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
+       enum hnae3_reset_type reset_level;
        int ret;
 
        /* Initialize ae_dev reset status as well, in case enet layer wants to
@@ -3697,10 +3698,10 @@ static void hclge_reset(struct hclge_dev *hdev)
         * it should be handled as soon as possible. since some errors
         * need this kind of reset to fix.
         */
-       hdev->reset_level = hclge_get_reset_level(ae_dev,
-                                                 &hdev->default_reset_request);
-       if (hdev->reset_level != HNAE3_NONE_RESET)
-               set_bit(hdev->reset_level, &hdev->reset_request);
+       reset_level = hclge_get_reset_level(ae_dev,
+                                           &hdev->default_reset_request);
+       if (reset_level != HNAE3_NONE_RESET)
+               set_bit(reset_level, &hdev->reset_request);
 
        return;