Received: by 2002:ac0:da4c:0:0:0:0:0 with SMTP id a12csp47474imi; Thu, 21 Jul 2022 15:41:36 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tiikBtoUYmVbFPCK4Kb2R3NmHNfzxmTxE3ilRagmd2yFjFZ6wMc7Wmglu7gCKGRXnpMAbF X-Received: by 2002:a05:6402:3581:b0:43a:d66b:99b5 with SMTP id y1-20020a056402358100b0043ad66b99b5mr584064edc.375.1658443296030; Thu, 21 Jul 2022 15:41:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658443296; cv=none; d=google.com; s=arc-20160816; b=U/KFlA8OKjpRQMSmsLx3pv7yD94mtFZn7BfQDA8oj9oRZPSHlHuhASdNFixZt7wHmQ sUTqfMB03+MziKKmKyZ+JIqtn6jGGQ9V8I7jAQczW8ksnQ/qmeVOfNSvAMCxw/avHQcH XaoZCoTIAtNtJEhnsVpNSD/xF6sd9F8+zbWsN0bLVJlusvx2gICBIW/ZBaaDAUfcCLjC XFXe23+SF1yXSzcNgB+HSsNvm0zx0fsWueIysfkKckmGBUUND3nFdULGLblEIW0uKlfb AGXUy+tl4ZhK2Gy8LMCJNImR8ceSqYI36e09fF9rBRMAlvtiltKgmFJ1h5roUmzSA3pk gBdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=GeD23PqVwfNuqMsDpd1lADH1R6RT+FpWEKL9sn8iPPw=; b=QI9Y8QFmxGXhyTqzf0WGK4Df0wF99O6BooBcSES6jO2XWSNoSotkuaBlGN3gbEg4Ms 6UcQHcofLLfPqBaTs4rB9daOfGiOivDriS5m3wT5QBGfqs/Ljzm6z5oHYFDhtIFWCxsE rP669L/wWiRJFRx8xHoV6Jpl9ywr2wLX+01hIiQsK/0BVZKATyYYaF/Mtd2OA7UG7OIu 8OSZ+j2fQlurjvvT9hqWx1UViawvUKF++Q2UcJvV/kIBzZtKL3Ja7hD9QcvDHMxbWTfI 5ZDaHXJh8ooxKomWUWATd5aa+W2mLaLgSs5FdidvmNGa/DM5Cl5aWhCVC+aOfzrvu2/S 8b1A== 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 cw17-20020a170906479100b0072ed9eda8e6si4398852ejc.985.2022.07.21.15.41.14; Thu, 21 Jul 2022 15:41:36 -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 S232767AbiGUWjz (ORCPT + 65 others); Thu, 21 Jul 2022 18:39:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232327AbiGUWjx (ORCPT ); Thu, 21 Jul 2022 18:39:53 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A02B16168 for ; Thu, 21 Jul 2022 15:39:47 -0700 (PDT) X-UUID: 15a343c844fd4153b01dd48f2597bd91-20220722 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.8,REQID:089c47ec-62d8-4f8f-8958-15c1d2ba139e,OB:10,L OB:0,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:95,FILE:0,RULE:Release_Ham,AC TION:release,TS:100 X-CID-INFO: VERSION:1.1.8,REQID:089c47ec-62d8-4f8f-8958-15c1d2ba139e,OB:10,LOB :0,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:95,FILE:0,RULE:Spam_GS981B3D,AC TION:quarantine,TS:100 X-CID-META: VersionHash:0f94e32,CLOUDID:85c321d8-5d6d-4eaf-a635-828a3ee48b7c,C OID:948705251075,Recheck:0,SF:28|17|19|48,TC:nil,Content:0,EDM:-3,IP:nil,U RL:1,File:nil,QS:nil,BEC:nil,COL:0 X-UUID: 15a343c844fd4153b01dd48f2597bd91-20220722 Received: from mtkcas11.mediatek.inc [(172.21.101.40)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1650163712; Fri, 22 Jul 2022 06:39:40 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) 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; Fri, 22 Jul 2022 06:39:38 +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; Fri, 22 Jul 2022 06:39:38 +0800 From: To: , CC: , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v2 1/2] mt76: sdio: fix the deadlock caused by sdio->stat_work Date: Fri, 22 Jul 2022 06:39:35 +0800 Message-ID: <940842e68716b513a5482c9c465befbd987ca38b.1658441953.git.sean.wang@kernel.org> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,RCVD_IN_MSPIKE_H2, RDNS_NONE,SPF_HELO_PASS,T_SPF_TEMPERROR,UNPARSEABLE_RELAY autolearn=no 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 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 [mt7615, mt7921]_mutex_acquire. Additionally, if [mt7615, mt7921]_mutex_acquire was called by sdio->stat_work self, the wake would be blocked by itself. Thus, we move the stat_work into ieee80211_workqueue instead to break the deadlock. Fixes: d39b52e31aa6 ("mt76: introduce mt76_sdio module") Co-developed-by: YN Chen Signed-off-by: YN Chen Signed-off-by: Sean Wang --- v2: move state_work to ieee80211_workqueue and update git message --- drivers/net/wireless/mediatek/mt76/sdio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/sdio.c b/drivers/net/wireless/mediatek/mt76/sdio.c index aba2a9865821..fb2caeae6dba 100644 --- a/drivers/net/wireless/mediatek/mt76/sdio.c +++ b/drivers/net/wireless/mediatek/mt76/sdio.c @@ -481,7 +481,7 @@ static void mt76s_status_worker(struct mt76_worker *w) if (dev->drv->tx_status_data && !test_and_set_bit(MT76_READING_STATS, &dev->phy.state) && !test_bit(MT76_STATE_SUSPEND, &dev->phy.state)) - queue_work(dev->wq, &dev->sdio.stat_work); + ieee80211_queue_work(dev->hw, &dev->sdio.stat_work); } while (nframes > 0); if (resched) @@ -508,7 +508,7 @@ static void mt76s_tx_status_data(struct work_struct *work) } if (count && test_bit(MT76_STATE_RUNNING, &dev->phy.state)) - queue_work(dev->wq, &sdio->stat_work); + ieee80211_queue_work(dev->hw, &sdio->stat_work); else clear_bit(MT76_READING_STATS, &dev->phy.state); } -- 2.25.1