Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4751696pxj; Wed, 12 May 2021 12:24:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzdS9Ikl886JvmFf916G37Kj5aks+UjpaZ21U5DgCuqSkAtf8IH2FTUt+cN08G4Qcun5RWx X-Received: by 2002:a17:907:628a:: with SMTP id nd10mr39854992ejc.326.1620847455247; Wed, 12 May 2021 12:24:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620847455; cv=none; d=google.com; s=arc-20160816; b=Y9RE1TSZnok+67BElPZ3Td5pfO1LOA7pVAd+VzSA70j6FNagTWuovP6uknCKj5Kp5Y 7cnJcqLwBxGEUOYVI2ATN9G/i1scEqWUAF3GNNbmOTArU2jlf3rxsM4eVbzxd7v+ln/c qIM8h9FYZRNIleeXI3csOszTuMC+eZWgmtDyPQVhQJnsAmwFJaHHm9A/izlYLQDUsjZ2 D/PfndA6t3rVYVFepHR3uVeY56OaF+Om43UqQ567xsEiFv+vUCN6NjefvZ8Q0F72sIRc tvDbrV2eYmP2n59j1tw8o7W3Vplyxxf8KSeDVN3CtXY6JbzFOu9rbARJ3hTSVxxcybhs M1aA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=lB/KWnYgAva3sIBmsp5r6LuAc/tVvuglV4r3FqMeLH8=; b=Sk8Yoc2u5jeHwmem/L4T7fINgD8IFhugcQSgH4U27XVHUmtvQ/UsQq3PKCXgviOLVH HC7mk1Su/WP5ktgUJfxG6o3shkBvc0lopGUDvgP6/3geL+sO6PM1NBkI8i7zKDhy56u+ MhZXUxOMR4pImlUEoIQIhA2DHDKBc6dPhHyXND88ShSqTgyFLKoEff1zNVOYahJm6+Bb +obAlhj5uy2h7X/hnJ0QaI/VWsVGJGKnXL+32jl/5u+NC8xdK/BA5j0ywsY3cj9uGm9u 91y83hqhqqI/smXzFr2Ktt63XggLiXJQskadXjtlUN0W/juazJENaNQE2hJGqfD8DJcm sOlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2pHceFT0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g20si339037ejz.520.2021.05.12.12.23.50; Wed, 12 May 2021 12:24:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2pHceFT0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378624AbhELTR2 (ORCPT + 99 others); Wed, 12 May 2021 15:17:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:46180 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236022AbhELQr7 (ORCPT ); Wed, 12 May 2021 12:47:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 316736134F; Wed, 12 May 2021 16:15:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620836130; bh=F2xLlKHPDjFWiOxEnBqoDDuFIXPyN3tos0Jij+rXoWU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2pHceFT0+bsNFNhj3S+vBS1ov/F+8wYYDVPYgQH7ZY/KzLP56J6sXnj9qyKCekpQy vyYGSsOgk/e5ObkW4nUawTkXLhQ6sHxE/fGxN/qCWPmoh5FwAGX20eRu3KCWWn96CH DiSCU+lh/CCQDhwMGlmGKr7CDmtokHmXOP4j5xWE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sean Wang , Felix Fietkau , Sasha Levin Subject: [PATCH 5.12 622/677] mt76: mt7921: fix possible invalid register access Date: Wed, 12 May 2021 16:51:08 +0200 Message-Id: <20210512144858.029192706@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Wang [ Upstream commit fe3fccde8870764ba3e60610774bd7bc9f8faeff ] Disable the interrupt and synchronze for the pending irq handlers to ensure the irq tasklet is not being scheduled after the suspend to avoid the possible invalid register access acts when the host pcie controller is suspended. [17932.910534] mt7921e 0000:01:00.0: pci_pm_suspend+0x0/0x22c returned 0 after 21375 usecs [17932.910590] pcieport 0000:00:00.0: calling pci_pm_suspend+0x0/0x22c @ 18565, parent: pci0000:00 [17932.910602] pcieport 0000:00:00.0: pci_pm_suspend+0x0/0x22c returned 0 after 8 usecs [17932.910671] mtk-pcie 11230000.pcie: calling platform_pm_suspend+0x0/0x60 @ 22783, parent: soc [17932.910674] mtk-pcie 11230000.pcie: platform_pm_suspend+0x0/0x60 returned 0 after 0 usecs ... 17933.615352] x1 : 00000000000d4200 x0 : ffffff8269ca2300 [17933.620666] Call trace: [17933.623127] mt76_mmio_rr+0x28/0xf0 [mt76] [17933.627234] mt7921_rr+0x38/0x44 [mt7921e] [17933.631339] mt7921_irq_tasklet+0x54/0x1d8 [mt7921e] [17933.636309] tasklet_action_common+0x12c/0x16c [17933.640754] tasklet_action+0x24/0x2c [17933.644418] __do_softirq+0x16c/0x344 [17933.648082] irq_exit+0xa8/0xac [17933.651224] scheduler_ipi+0xd4/0x148 [17933.654890] handle_IPI+0x164/0x2d4 [17933.658379] gic_handle_irq+0x140/0x178 [17933.662216] el1_irq+0xb8/0x180 [17933.665361] cpuidle_enter_state+0xf8/0x204 [17933.669544] cpuidle_enter+0x38/0x4c [17933.673122] do_idle+0x1a4/0x2a8 [17933.676352] cpu_startup_entry+0x24/0x28 [17933.680276] rest_init+0xd4/0xe0 [17933.683508] arch_call_rest_init+0x10/0x18 [17933.687606] start_kernel+0x340/0x3b4 [17933.691279] Code: aa0003f5 d503201f f953eaa8 8b344108 (b9400113) [17933.697373] ---[ end trace a24b8e26ffbda3c5 ]--- [17933.767846] Kernel panic - not syncing: Fatal exception in interrupt Fixes: ffa1bf97425b ("mt76: mt7921: introduce PM support") Signed-off-by: Sean Wang Signed-off-by: Felix Fietkau Signed-off-by: Sasha Levin --- drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c index 8e756871a056..80f6f29892a4 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c @@ -195,7 +195,6 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state) mt76_for_each_q_rx(mdev, i) { napi_disable(&mdev->napi[i]); } - tasklet_kill(&dev->irq_tasklet); pci_enable_wake(pdev, pci_choose_state(pdev, state), true); @@ -210,6 +209,9 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state) /* disable interrupt */ mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0); + mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0); + synchronize_irq(pdev->irq); + tasklet_kill(&dev->irq_tasklet); err = mt7921_mcu_fw_pmctrl(dev); if (err) -- 2.30.2