Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3752528imw; Mon, 18 Jul 2022 13:56:58 -0700 (PDT) X-Google-Smtp-Source: AGRyM1thEUWiv5SigM/ttd95fA6ARh7d4FkUUXfLUGMjUjL3fVxemkCXN4pnBIoyG87iTEwFyTSS X-Received: by 2002:a17:907:9706:b0:72b:4b0d:86a2 with SMTP id jg6-20020a170907970600b0072b4b0d86a2mr26338605ejc.242.1658177817800; Mon, 18 Jul 2022 13:56:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658177817; cv=none; d=google.com; s=arc-20160816; b=mM0DAF8hfhmBHKj6TyRFs/C5c7cEVwLOLyqrEzz0AZtNpCOqcoToTwisogFhiEf06A G0mYMkFCEOs7bGQQc5zav9E6tQQedWswvPZGaW2O9FwDPKbXTygQpYHq1wWoQJmP6pg6 oZoPAHr5NhU4iRVRAm6+vrmxyMQWKFnE5D5ygLQwnDm+WHu88I5Am40lvN5DMb5XHnuT N3OqdtSKVzYAfwc8a1a71zCFC/4XDll8SAEQLl1z+9/zXTct5CcyzH2/SuSRU3taWsSt 4wnCpcdfX6oWY+7RIahIRuRlhCCvT4jL2aKlJj6Z19qbP9wcyQfKSrfTNoD478Bx843f 3dzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=GiRaIL+3Z8EiStHnx/0hNDg0iphjDSLHo0nIP2wct9c=; b=m0X3SMz8ATw/QtU3HACH65g5Tokuxg9v2B5Ixaw3MLoBjEhm4sQB3dqRXuiJ+j7oYZ OPLvpvOs6+/hKOq0fjbfnfuDPUlkML9iJHlCQh6gnPwclx+BBINn8OAVB+FE0YUZp29J 8qqlUpKrFdG8XDZx7o5NELrifnwIawXl61KFKwIYNkZyGT4n8PrEXydfJBcsogajfi6f T2qmxA9egvP4f+sPK9GSRlZCva9ivxlaAE0HmCMC5WaFrV4nwn2rHMRJwLnfMpZM/Vzz ED4Qd6vcjYwTjdVcgkEJzvC6olcgh2vR7+WVorGgeId2gkWpDkbSca45pqZ+QxsAPrS0 XrIg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d13-20020a056402078d00b0043a6ff10fbbsi9344741edy.524.2022.07.18.13.56.34; Mon, 18 Jul 2022 13:56:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234117AbiGRUvo (ORCPT + 65 others); Mon, 18 Jul 2022 16:51:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233943AbiGRUvn (ORCPT ); Mon, 18 Jul 2022 16:51:43 -0400 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2481326CF for ; Mon, 18 Jul 2022 13:51:37 -0700 (PDT) X-UUID: f330dc06d3434a24b1a150c0571386ad-20220719 X-CID-P-RULE: Spam_GS6885AD X-CID-O-INFO: VERSION:1.1.8,REQID:3fc07cfb-1062-46a2-9a5a-a4a690c30599,OB:0,LO B:0,IP:0,URL:5,TC:0,Content:100,EDM:0,RT:0,SF:95,FILE:0,RULE:Spam_GS6885AD ,ACTION:quarantine,TS:200 X-CID-INFO: VERSION:1.1.8,REQID:3fc07cfb-1062-46a2-9a5a-a4a690c30599,OB:0,LOB: 0,IP:0,URL:5,TC:0,Content:100,EDM:0,RT:0,SF:95,FILE:0,RULE:Spam_HTS54396,A CTION:quarantine,TS:200 X-CID-META: VersionHash:0f94e32,CLOUDID:ee9ed0d7-5d6d-4eaf-a635-828a3ee48b7c,C OID:8ebf8caedc78,Recheck:0,SF:28|17|19|48|801,TC:nil,Content:3,EDM:-3,IP:n il,URL:1,File:nil,QS:nil,BEC:nil,COL:0 X-UUID: f330dc06d3434a24b1a150c0571386ad-20220719 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 673656211; Tue, 19 Jul 2022 04:51:32 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.3; Tue, 19 Jul 2022 04:51:30 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkmbs11n2.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.792.3 via Frontend Transport; Tue, 19 Jul 2022 04:51:30 +0800 From: To: , CC: , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 2/4] mt76: mt7921s: fix race issue between reset and suspend/resume Date: Tue, 19 Jul 2022 04:51:24 +0800 Message-ID: <75694a4b71cb9a463472789ba43ffe53169dd831.1658176701.git.sean.wang@kernel.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-MTK: N X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,T_SPF_TEMPERROR,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Sean Wang It is unexpected that the reset work is running simultaneously with the suspend or resume context and it is possible that reset work is still running even after mt7921 is suspended if we don't fix the race issue. Thus, the suspend procedure should be waiting until the reset is completed at the beginning and ignore the subsequent the reset requests. In case there is an error that happens during either suspend or resume handler, we will schedule a reset task to recover the error before returning the error code to ensure we can immediately fix the error there. Fixes: ca74b9b907f9 ("mt76: mt7921s: add reset support") Co-developed-by: YN Chen Signed-off-by: YN Chen Signed-off-by: Sean Wang --- drivers/net/wireless/mediatek/mt76/mt7921/sdio.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c index 487acd6e2be8..d50ef6acb00e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c @@ -206,6 +206,7 @@ static int mt7921s_suspend(struct device *__dev) pm->suspended = true; set_bit(MT76_STATE_SUSPEND, &mdev->phy.state); + cancel_work_sync(&dev->reset_work); cancel_delayed_work_sync(&pm->ps_work); cancel_work_sync(&pm->wake_work); @@ -261,6 +262,9 @@ static int mt7921s_suspend(struct device *__dev) clear_bit(MT76_STATE_SUSPEND, &mdev->phy.state); pm->suspended = false; + if (err < 0) + mt7921_reset(&dev->mt76); + return err; } @@ -276,7 +280,7 @@ static int mt7921s_resume(struct device *__dev) err = mt7921_mcu_drv_pmctrl(dev); if (err < 0) - return err; + goto failed; mt76_worker_enable(&mdev->tx_worker); mt76_worker_enable(&mdev->sdio.txrx_worker); @@ -288,11 +292,12 @@ static int mt7921s_resume(struct device *__dev) mt76_connac_mcu_set_deep_sleep(mdev, false); err = mt76_connac_mcu_set_hif_suspend(mdev, false); - if (err) - return err; - +failed: pm->suspended = false; + if (err < 0) + mt7921_reset(&dev->mt76); + return err; } -- 2.25.1