| From 1f10cc24504f07678586057d9a2d9753b44cb51b Mon Sep 17 00:00:00 2001 |
| From: Huazhong Tan <tanhuazhong@huawei.com> |
| Date: Sat, 6 Apr 2019 15:43:34 +0800 |
| Subject: net: hns3: add error handler for initializing command queue |
| |
| [ Upstream commit 4339ef396ab65a61f7f22f36d7ba94b6e9e0939b ] |
| |
| This patch adds error handler for the failure of command queue |
| initialization both PF and VF. |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c | 11 ++++++++--- |
| .../net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c | 11 ++++++++--- |
| 2 files changed, 16 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c |
| index 3a093a92eac51..d92e4af11b1fe 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c |
| +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c |
| @@ -373,21 +373,26 @@ int hclge_cmd_init(struct hclge_dev *hdev) |
| * reset may happen when lower level reset is being processed. |
| */ |
| if ((hclge_is_reset_pending(hdev))) { |
| - set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); |
| - return -EBUSY; |
| + ret = -EBUSY; |
| + goto err_cmd_init; |
| } |
| |
| ret = hclge_cmd_query_firmware_version(&hdev->hw, &version); |
| if (ret) { |
| dev_err(&hdev->pdev->dev, |
| "firmware version query failed %d\n", ret); |
| - return ret; |
| + goto err_cmd_init; |
| } |
| hdev->fw_version = version; |
| |
| dev_info(&hdev->pdev->dev, "The firmware version is %08x\n", version); |
| |
| return 0; |
| + |
| +err_cmd_init: |
| + set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); |
| + |
| + return ret; |
| } |
| |
| static void hclge_cmd_uninit_regs(struct hclge_hw *hw) |
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c |
| index 9a0a501908aec..382ecb15e7435 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c |
| +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c |
| @@ -344,8 +344,8 @@ int hclgevf_cmd_init(struct hclgevf_dev *hdev) |
| * reset may happen when lower level reset is being processed. |
| */ |
| if (hclgevf_is_reset_pending(hdev)) { |
| - set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); |
| - return -EBUSY; |
| + ret = -EBUSY; |
| + goto err_cmd_init; |
| } |
| |
| /* get firmware version */ |
| @@ -353,13 +353,18 @@ int hclgevf_cmd_init(struct hclgevf_dev *hdev) |
| if (ret) { |
| dev_err(&hdev->pdev->dev, |
| "failed(%d) to query firmware version\n", ret); |
| - return ret; |
| + goto err_cmd_init; |
| } |
| hdev->fw_version = version; |
| |
| dev_info(&hdev->pdev->dev, "The firmware version is %08x\n", version); |
| |
| return 0; |
| + |
| +err_cmd_init: |
| + set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); |
| + |
| + return ret; |
| } |
| |
| static void hclgevf_cmd_uninit_regs(struct hclgevf_hw *hw) |
| -- |
| 2.20.1 |
| |