Skip to content

Commit

Permalink
net: hns3: Fix for CMDQ and Misc. interrupt init order problem
Browse files Browse the repository at this point in the history
When vf module is loading, the cmd queue initialization should
happen before misc interrupt initialization, otherwise the misc
interrupt handle will cause using uninitialized cmd queue problem.
There is also the same issue when vf module is unloading.

This patch fixes it by adjusting the location of some function.

Fixes: e2cb1de ("net: hns3: Add HNS3 VF HCL(Hardware Compatibility Layer) Support")
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Yunsheng Lin authored and David S. Miller committed May 20, 2018
1 parent 7bb572f commit eddf046
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1634,17 +1634,17 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)

hclgevf_state_init(hdev);

ret = hclgevf_cmd_init(hdev);
if (ret)
goto err_cmd_init;

ret = hclgevf_misc_irq_init(hdev);
if (ret) {
dev_err(&pdev->dev, "failed(%d) to init Misc IRQ(vector0)\n",
ret);
goto err_misc_irq_init;
}

ret = hclgevf_cmd_init(hdev);
if (ret)
goto err_cmd_init;

ret = hclgevf_configure(hdev);
if (ret) {
dev_err(&pdev->dev, "failed(%d) to fetch configuration\n", ret);
Expand Down Expand Up @@ -1692,10 +1692,10 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
return 0;

err_config:
hclgevf_cmd_uninit(hdev);
err_cmd_init:
hclgevf_misc_irq_uninit(hdev);
err_misc_irq_init:
hclgevf_cmd_uninit(hdev);
err_cmd_init:
hclgevf_state_uninit(hdev);
hclgevf_uninit_msi(hdev);
err_irq_init:
Expand All @@ -1705,9 +1705,9 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)

static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev)
{
hclgevf_cmd_uninit(hdev);
hclgevf_misc_irq_uninit(hdev);
hclgevf_state_uninit(hdev);
hclgevf_misc_irq_uninit(hdev);
hclgevf_cmd_uninit(hdev);
hclgevf_uninit_msi(hdev);
hclgevf_pci_uninit(hdev);
}
Expand Down

0 comments on commit eddf046

Please sign in to comment.