From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A664578B7C; Wed, 21 Feb 2024 13:55:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708523701; cv=none; b=WmLr1haiUQErsykE4awpz9xwc3NumYCAV0cg6fsKgft6MNYFSNKc3+XC8nM3IH1QstKc6zzKTgUrWZJbzLdNrbgX3GJVO2Oy7t+WpQ4HpA0tzBRoYvJTpykNcAtC/1l+fIs5oz6xBTR+Z95Cgo5ZmoI3Ri0r1A0aLvePd9nURss= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708523701; c=relaxed/simple; bh=RH/uTf4irE2Fzqt+zq++iCx7xbcXI6Lj59pkGQbN20k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iV/gTjuMwC49itu6p8aMdRF5ydKBPRIM2Q6gPoOxNRl+CgdkuPByl+G+2xYepn7a8qXcH66NuVCRvGY8jIKmfBG2Ek2eGDNSvMSTmQC997F9NxPvjjmMq/ILDP+YfmAChQzoPICC3KaB9N1PSLMCjpn4/9vqKjHwaSEuO7PTAa8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=vhS9DrHY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="vhS9DrHY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E164C433F1; Wed, 21 Feb 2024 13:55:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1708523701; bh=RH/uTf4irE2Fzqt+zq++iCx7xbcXI6Lj59pkGQbN20k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vhS9DrHYkxdgNR8Y1DUOquUwzOvDUhpToRz3twik4lCNJ1pz1nTT+8cpmVeV32LYu s5TvoiFaZLsbYKx2hVinXpPMpSbMxF7kL7Zx1k2DYLuTG6nRSzbQ8NHGI7zifQyV8H Y103jEtav2AV54rnDFcxqcHtHZKAJGhPS6wrEtPc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, qizhong cheng , Jianjun Wang , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Bjorn Helgaas , AngeloGioacchino Del Regno , Sasha Levin Subject: [PATCH 5.10 006/379] PCI: mediatek: Clear interrupt status before dispatching handler Date: Wed, 21 Feb 2024 14:03:05 +0100 Message-ID: <20240221125955.109695977@linuxfoundation.org> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240221125954.917878865@linuxfoundation.org> References: <20240221125954.917878865@linuxfoundation.org> User-Agent: quilt/0.67 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5.10-stable review patch. If anyone has any objections, please let me know. ------------------ From: qizhong cheng [ Upstream commit 4e11c29873a8a296a20f99b3e03095e65ebf897d ] We found a failure when using the iperf tool during WiFi performance testing, where some MSIs were received while clearing the interrupt status, and these MSIs cannot be serviced. The interrupt status can be cleared even if the MSI status remains pending. As such, given the edge-triggered interrupt type, its status should be cleared before being dispatched to the handler of the underling device. [kwilczynski: commit log, code comment wording] Link: https://lore.kernel.org/linux-pci/20231211094923.31967-1-jianjun.wang@mediatek.com Fixes: 43e6409db64d ("PCI: mediatek: Add MSI support for MT2712 and MT7622") Signed-off-by: qizhong cheng Signed-off-by: Jianjun Wang Signed-off-by: Krzysztof WilczyƄski [bhelgaas: rewrap comment] Signed-off-by: Bjorn Helgaas Reviewed-by: AngeloGioacchino Del Regno Cc: Signed-off-by: Sasha Levin --- drivers/pci/controller/pcie-mediatek.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c index 23548b517e4b..ea91d63c8be1 100644 --- a/drivers/pci/controller/pcie-mediatek.c +++ b/drivers/pci/controller/pcie-mediatek.c @@ -620,14 +620,20 @@ static void mtk_pcie_intr_handler(struct irq_desc *desc) if (status & MSI_STATUS){ unsigned long imsi_status; + /* + * The interrupt status can be cleared even if the + * MSI status remains pending. As such, given the + * edge-triggered interrupt type, its status should + * be cleared before being dispatched to the + * handler of the underlying device. + */ + writel(MSI_STATUS, port->base + PCIE_INT_STATUS); while ((imsi_status = readl(port->base + PCIE_IMSI_STATUS))) { for_each_set_bit(bit, &imsi_status, MTK_MSI_IRQS_NUM) { virq = irq_find_mapping(port->inner_domain, bit); generic_handle_irq(virq); } } - /* Clear MSI interrupt status */ - writel(MSI_STATUS, port->base + PCIE_INT_STATUS); } } -- 2.43.0