lkml.org 
[lkml]   [2021]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 048/169] net: hns3: fix vf reset workqueue cannot exit
    Date
    From: Yufeng Mo <moyufeng@huawei.com>

    [ Upstream commit 1385cc81baeb3bd8cbbbcdc1557f038ac1712529 ]

    The task of VF reset is performed through the workqueue. It checks the
    value of hdev->reset_pending to determine whether to exit the loop.
    However, the value of hdev->reset_pending may also be assigned by
    the interrupt function hclgevf_misc_irq_handle(), which may cause the
    loop fail to exit and keep occupying the workqueue. This loop is not
    necessary, so remove it and the workqueue will be rescheduled if the
    reset needs to be retried or a new reset occurs.

    Fixes: 1cc9bc6e5867 ("net: hns3: split hclgevf_reset() into preparing and rebuilding part")
    Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
    Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    index 22cf66004dfa..b8414f684e89 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    @@ -2271,9 +2271,9 @@ static void hclgevf_reset_service_task(struct hclgevf_dev *hdev)
    hdev->reset_attempts = 0;

    hdev->last_reset_time = jiffies;
    - while ((hdev->reset_type =
    - hclgevf_get_reset_level(hdev, &hdev->reset_pending))
    - != HNAE3_NONE_RESET)
    + hdev->reset_type =
    + hclgevf_get_reset_level(hdev, &hdev->reset_pending);
    + if (hdev->reset_type != HNAE3_NONE_RESET)
    hclgevf_reset(hdev);
    } else if (test_and_clear_bit(HCLGEVF_RESET_REQUESTED,
    &hdev->reset_state)) {
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-10-25 21:54    [W:4.050 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site