From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 95406C43334 for ; Wed, 20 Jul 2022 22:52:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:CC:To:From:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=fqnLiDB/JOu7RWLo5u2Mprf/3rd5RBIzN1qHfoyeCO0=; b=r1ciRqLNC084j5njUTD/u3oDZ2 MC0tfbtqmMisEEpmymhnSGxE0F+1EDGuX8jj88Sgdj+1w7uX63v3yTDRL1Zntm52tJSABhVJ8UKp0 LsIEXW7hdU1e0ITh/jSZavk5jNDJ+NWMEuw+ap4QhwECXxl2+Dg65nHjk4VffcDWi2MvC+TZoiMkZ H//tqnX8Sh/x2qZk+zUXFakmhu4UBSTTfr2Icp30nlF8IXSqqyGTYRdSXTsc/7u+QLhKTBMVDDODh lxjXmWB8k4VEEBlZdyXbibKc8T0HJU67tNsx0EfDPDKQDm1EC2QyasfvEluZkMff+Ho6inSGbMZB0 l1chaL5Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oEIYh-00Chfh-JB; Wed, 20 Jul 2022 22:52:47 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oEIYe-00ChaO-K2 for linux-mediatek@lists.infradead.org; Wed, 20 Jul 2022 22:52:46 +0000 X-UUID: 7332812c055447d98d56243c94b79535-20220720 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.8,REQID:abc40d46-6d0e-4d0a-90e6-85f691c2bd5a,OB:0,LO B:0,IP:0,URL:5,TC:0,Content:3,EDM:0,RT:0,SF:0,FILE:0,RULE:Release_Ham,ACTI ON:release,TS:8 X-CID-META: VersionHash:0f94e32,CLOUDID:815f8433-b9e4-42b8-b28a-6364427c76bb,C OID:IGNORED,Recheck:0,SF:nil,TC:nil,Content:3,EDM:-3,IP:nil,URL:1,File:nil ,QS:nil,BEC:nil,COL:0 X-UUID: 7332812c055447d98d56243c94b79535-20220720 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1344772580; Wed, 20 Jul 2022 15:52:40 -0700 Received: from mtkmbs11n1.mediatek.inc (172.21.101.185) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Thu, 21 Jul 2022 06:32:37 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.792.3 via Frontend Transport; Thu, 21 Jul 2022 06:32:37 +0800 From: To: CC: , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH 1/3] mt76: mt7921s: fix the deadlock caused by sdio->stat_work Date: Thu, 21 Jul 2022 06:32:36 +0800 Message-ID: <1658356356-29058-1-git-send-email-sean.wang@mediatek.com> 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220720_155244_686275_60A0DC74 X-CRM114-Status: GOOD ( 17.41 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Sean Wang >>> From: Sean Wang >> >> Because wake_work and sdio->stat_work share the same workqueue >> mt76->wq, if sdio->stat_work cannot acquire the mutex lock such as >> that was possibly held up by mt7921_mutex_acquire, we should exit >> immediately and schedule another stat_work to avoid blocking the mt7921_mutex_acquire. >> >> Also, if mt7921_mutex_acquire was called by sdio->stat_work self, the >> wake would be blocked by itself, so we have to changing into an >> unblocking wake (directly wakeup via mt7921_mcu_drv_pmctrl, not via >> the wake_work) in the context. > >Hi Sean, > >it seems to me we are missing some logic here (e.g cancelling ps_work as we do in mt76_connac_pm_wake()). Is it enough to move mt7921_usb_sdio_tx_status_data on mac80211 workqueue? Can you see any performance issue? (same for mt7663). I will try to reuse the mac80211 workqueue for stat_work that can help mt7921_usb_sdio_tx_status_data as is and fix the deadlock. thanks for your suggestion! > >Regards, >Lorenzo > >> >> Fixes: 48fab5bbef40 ("mt76: mt7921: introduce mt7921s support") >> Co-developed-by: YN Chen >> Signed-off-by: YN Chen >> Signed-off-by: Sean Wang >> --- >> .../net/wireless/mediatek/mt76/mt7921/mac.c | 22 +++++++++++++++++-- >> 1 file changed, 20 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> index 6bd9fc9228a2..75e719175e92 100644 >> --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> @@ -1080,10 +1080,28 @@ bool mt7921_usb_sdio_tx_status_data(struct >> mt76_dev *mdev, u8 *update) { >> struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, >> mt76); >> >> - mt7921_mutex_acquire(dev); >> + if (!mutex_trylock(&mdev->mutex)) { >> + /* Because wake_work and stat_work share the same workqueue >> + * mt76->wq, if sdio->stat_work cannot acquire the mutex lock, >> + * we should exit immediately and schedule another stat_work >> + * to avoid blocking the wake_work. >> + */ >> + struct work_struct *stat_work; >> + >> + stat_work = mt76_is_sdio(mdev) ? &mdev->sdio.stat_work : >> + &mdev->usb.stat_work; >> + queue_work(dev->mt76.wq, stat_work); >> + >> + goto out; >> + } >> + >> + mt7921_mcu_drv_pmctrl(dev); >> mt7921_mac_sta_poll(dev); >> - mt7921_mutex_release(dev); >> + mt76_connac_power_save_sched(&mdev->phy, &dev->pm); >> >> + mutex_unlock(&mdev->mutex); >> + >> +out: >> return false; >> } >> EXPORT_SYMBOL_GPL(mt7921_usb_sdio_tx_status_data); >> -- >> 2.25.1 >> >