Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp471953yba; Wed, 24 Apr 2019 04:38:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqwNwQxDkJsL6npAcs6jcwUgP/EQPiWKWUxDtEcO8RkZDmUIWogy1v8l+++g5/Z8VjCCr9E/ X-Received: by 2002:aa7:92d5:: with SMTP id k21mr32769463pfa.223.1556105914562; Wed, 24 Apr 2019 04:38:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556105914; cv=none; d=google.com; s=arc-20160816; b=NBZSQvnkgf8MnX7yiknlf+3ljyGKbbkKar2kGKQGWvdcarrXOQZo/bau3sBrhvB5+g SLhUyn/F2yg+iAzWQDQc5mCf0F6eCA0chxAbTTm1CFMkzVSgUYyxMALj0iPoUwAD7wHi SBGyGsN8g7dDYQpmMVDQnn7+qXVEEoGic+jY9ThMYg0RUb6m/KD19iKNExsr1b272hAB a4SnQA1hNje0l4SeKabC2K9XQQ3JqsVvLXzMdnKmITaP0VrandJc0uTWDKcI25CELa9j 9Vx8g1LWnae2D/nemZdJgTcT5vWvlzWXoVT47KXdbfJqpukniFFSh/mcMgfBXOqMiyvE Afnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=MQMyuey7VJwK297I1O3UHadDhbF2pS7puWkQmGLSXv8=; b=wKXnJPht/UmQ+CaLSMYwEjYPt1bV51lDKTP3tPWt3GP/jcKlojLaQtSOqqk9vAAv+f kJ8W9yRrhxAm9xEbjRO8UKFXXidzTiLAsl6XYe5c4tzHN1eMgS9GamKCt6Ftvbj5XK73 BIHvmTswkDQ9gSmXlBq02Na13/DLLFtOl9iMUxQYQ0dcOeV1tJUATz7P5xwQxAX1g7mb B0k4QMLYmt9pnW56ktVjAanSy0tryUebIsrNIPsdavDTwgw/rix60EfQGN9GNIl3UI1A mAbDJJeuEnl+b7Xa/7n2VZRInnxMRzSiMxNL5bWU/u+YS60WWTAVaIAgKmkCsTLSdFLE jUBA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3si19720380plo.300.2019.04.24.04.38.19; Wed, 24 Apr 2019 04:38:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729558AbfDXLIK (ORCPT + 99 others); Wed, 24 Apr 2019 07:08:10 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:37404 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727881AbfDXLGy (ORCPT ); Wed, 24 Apr 2019 07:06:54 -0400 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 8A0496E2F7CC0D308FF8; Wed, 24 Apr 2019 19:06:51 +0800 (CST) Received: from localhost.localdomain (10.67.212.132) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.439.0; Wed, 24 Apr 2019 19:06:42 +0800 From: Huazhong Tan To: CC: , , , , , , Huazhong Tan , Peng Li Subject: [PATCH V2 net-next 08/12] net: hns3: stop schedule reset service while unloading driver Date: Wed, 24 Apr 2019 19:05:27 +0800 Message-ID: <1556103931-64031-9-git-send-email-tanhuazhong@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1556103931-64031-1-git-send-email-tanhuazhong@huawei.com> References: <1556103931-64031-1-git-send-email-tanhuazhong@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.212.132] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch uses HCLGE_STATE_REMOVING/HCLGEVF_STATE_REMOVING flag to indicate that the driver is unloading, and we should stop new coming reset service to be scheduled, otherwise, reset service will access some resource which has been freed by unloading. Signed-off-by: Huazhong Tan Signed-off-by: Peng Li --- V1->V2: fixes a flag setting error --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 4 +++- drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 +++- drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 4d5568e..ead8308 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -2175,7 +2175,8 @@ static void hclge_mbx_task_schedule(struct hclge_dev *hdev) static void hclge_reset_task_schedule(struct hclge_dev *hdev) { - if (!test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state)) + if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) && + !test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state)) schedule_work(&hdev->rst_service_task); } @@ -7768,6 +7769,7 @@ static void hclge_state_init(struct hclge_dev *hdev) static void hclge_state_uninit(struct hclge_dev *hdev) { set_bit(HCLGE_STATE_DOWN, &hdev->state); + set_bit(HCLGE_STATE_REMOVING, &hdev->state); if (hdev->service_timer.function) del_timer_sync(&hdev->service_timer); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c index 6ce5b03..01ab843 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c @@ -1611,7 +1611,8 @@ static void hclgevf_get_misc_vector(struct hclgevf_dev *hdev) void hclgevf_reset_task_schedule(struct hclgevf_dev *hdev) { - if (!test_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state)) { + if (!test_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state) && + !test_bit(HCLGEVF_STATE_REMOVING, &hdev->state)) { set_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state); schedule_work(&hdev->rst_service_task); } @@ -2122,6 +2123,7 @@ static void hclgevf_state_init(struct hclgevf_dev *hdev) static void hclgevf_state_uninit(struct hclgevf_dev *hdev) { set_bit(HCLGEVF_STATE_DOWN, &hdev->state); + set_bit(HCLGEVF_STATE_REMOVING, &hdev->state); if (hdev->keep_alive_timer.function) del_timer_sync(&hdev->keep_alive_timer); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h index ee3a6cb..0cceda3 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h @@ -130,6 +130,7 @@ enum hclgevf_states { HCLGEVF_STATE_DOWN, HCLGEVF_STATE_DISABLED, HCLGEVF_STATE_IRQ_INITED, + HCLGEVF_STATE_REMOVING, /* task states */ HCLGEVF_STATE_SERVICE_SCHED, HCLGEVF_STATE_RST_SERVICE_SCHED, -- 2.7.4