Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp3679485rwl; Tue, 27 Dec 2022 13:09:51 -0800 (PST) X-Google-Smtp-Source: AMrXdXv+6xcXIkplody/vXNmXZGL3nUhFZaZLiPpQB/a01xkfMazmq6TdXd8KLgugAunU+nv5F8H X-Received: by 2002:a17:906:b08b:b0:7c4:f8fb:6a27 with SMTP id x11-20020a170906b08b00b007c4f8fb6a27mr25527113ejy.0.1672175390831; Tue, 27 Dec 2022 13:09:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672175390; cv=none; d=google.com; s=arc-20160816; b=nidQcpgKtWFSwHWbAvqcgD5J1b4GnTCfqrXR//lszKn9sLrHSMNLRb5/6D3fdMXpSK gL7+8Avc5s6JGvWFpfEERyaEWYHLEnm8aZzVgVq7PcSawkKovj2z2PMsNg0OfUDbzV+a H7QTol3A+cXpnezsnG7P6Nw+38ud8QjQVQRYZRXyqgalUgsbywkxVdsmNKQ8129rGWr4 +Cjsc1jH1c8lDNHMPX09gPCg347ABcvhVKjTupTKZ9C5E8a1pDI4dbPhYvqzQRfecvuP /ME94WaP6LCqTzAdykEO524mD+cMp4c61ZXDijfKce6pGiVOI9fiBZUs64cyv7k+7Ut7 pqeg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3B3vHZHp34CXqV7dbBUSjIjtcXN1arnG6EXtL/6P6VY=; b=r1njxXQrvBiraYmE4sKVx82ao+bF1wZhOq6QYbe50fM0kKcvg0QI+F2hlqaUJVPDcY qU1CTu4RL/CSiVU7KPIXFYWT9YMEg9RTmDqBcGnKYPUK8oOt3qjmLHoC7/r26ewN1+5l 1qygFt2e4mBhfl8TlSN3xQcfoWqqHK75+TVfddo+cuFtYOZOFZv/X08cSCe5+mvMnQ8H WWAW4Vbc7HZLU0NTkJzJxNF0Uyk4DwJ2bHxbpC9UL8+lyuv9FieQ0FGmFf8+bAp6Aitm UmxPAS92qmWWrhtsx5HUE5IS5yRN9V04Q4V3JzDZVO802FbKsiMywQx5ui6wmAK4HlG2 0ktg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tbkvUupn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id wz12-20020a170906fe4c00b007f0e3370f87si10273492ejb.297.2022.12.27.13.09.35; Tue, 27 Dec 2022 13:09:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-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; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tbkvUupn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232871AbiL0Urc (ORCPT + 66 others); Tue, 27 Dec 2022 15:47:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58902 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233095AbiL0Uq5 (ORCPT ); Tue, 27 Dec 2022 15:46:57 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3F0811A3F; Tue, 27 Dec 2022 12:37:30 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id E6018B81168; Tue, 27 Dec 2022 20:36:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9533EC433D2; Tue, 27 Dec 2022 20:36:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1672173383; bh=wMZe9mZpDXi/cwETCn9flDrxwZLG6uKTH+VqjOmaa/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tbkvUupnj5tuSoVCC27gMK1sQ9Q/6lMivVq0dSdABqu15Fv2hf07447CqUViKKnuE XxMEQu1eGkaoPTCLwMD0fR+DOSC1jyeP26WPmRMrKtd/ID0zhtYyjWtjWwYioKujBg HE8EGhnw2qT82MCdQ7VVT9ZUPYCibpP4ZzwS8K5S8Vvj33fmVr9p5wJOhxB8PEwR5Q /HGGQwd3Us5q8ROjFticK6RM2od3cGep9xZjmS706uewsznsCXC8paCDCKfDhokVKl 4LF5Ts1MbVFFzv0ixv2bnaBqsbtnqLeCicPgUtJsnYNsDHSMz2mfygk4zFhlFvPvSj dsTejAqWBg49A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Marc Zyngier , Guenter Roeck , Sasha Levin , mpe@ellerman.id.au, christophe.leroy@csgroup.eu, windhl@126.com, Julia.Lawall@inria.fr, joel@jms.id.au, linuxppc-dev@lists.ozlabs.org Subject: [PATCH AUTOSEL 4.14 3/4] powerpc/msi: Fix deassociation of MSI descriptors Date: Tue, 27 Dec 2022 15:36:08 -0500 Message-Id: <20221227203611.1214818-3-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221227203611.1214818-1-sashal@kernel.org> References: <20221227203611.1214818-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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-kernel@vger.kernel.org From: Marc Zyngier [ Upstream commit 4545c6a3d6ba71747eaa984c338ddd745e56e23f ] Since 2f2940d16823 ("genirq/msi: Remove filter from msi_free_descs_free_range()"), the core MSI code relies on the msi_desc->irq field to have been cleared before the descriptor can be freed, as it indicates that there is no association with a device anymore. The irq domain code provides this guarantee, and so does s390, which is one of the two architectures not using irq domains for MSIs. Powerpc, however, is missing this particular requirements, leading in a splat and leaked MSI descriptors. Adding the now required irq reset to the handful of powerpc backends that implement MSIs fixes that particular problem. Reported-by: Guenter Roeck Signed-off-by: Marc Zyngier Link: https://lore.kernel.org/r/70dab88e-6119-0c12-7c6a-61bcbe239f66@roeck-us.net Signed-off-by: Sasha Levin --- arch/powerpc/platforms/4xx/hsta_msi.c | 1 + arch/powerpc/platforms/cell/axon_msi.c | 1 + arch/powerpc/platforms/pasemi/msi.c | 1 + arch/powerpc/sysdev/fsl_msi.c | 1 + arch/powerpc/sysdev/mpic_u3msi.c | 1 + 5 files changed, 5 insertions(+) diff --git a/arch/powerpc/platforms/4xx/hsta_msi.c b/arch/powerpc/platforms/4xx/hsta_msi.c index 9926ad67af76..ac5fbb2492aa 100644 --- a/arch/powerpc/platforms/4xx/hsta_msi.c +++ b/arch/powerpc/platforms/4xx/hsta_msi.c @@ -121,6 +121,7 @@ static void hsta_teardown_msi_irqs(struct pci_dev *dev) msi_bitmap_free_hwirqs(&ppc4xx_hsta_msi.bmp, irq, 1); pr_debug("%s: Teardown IRQ %u (index %u)\n", __func__, entry->irq, irq); + entry->irq = 0; } } diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c index e98b61c06a81..1c889a9e1a4f 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c @@ -299,6 +299,7 @@ static void axon_msi_teardown_msi_irqs(struct pci_dev *dev) irq_set_msi_desc(entry->irq, NULL); irq_dispose_mapping(entry->irq); + entry->irq = 0; } } diff --git a/arch/powerpc/platforms/pasemi/msi.c b/arch/powerpc/platforms/pasemi/msi.c index d9cd510c8865..6e54377663db 100644 --- a/arch/powerpc/platforms/pasemi/msi.c +++ b/arch/powerpc/platforms/pasemi/msi.c @@ -74,6 +74,7 @@ static void pasemi_msi_teardown_msi_irqs(struct pci_dev *pdev) hwirq = virq_to_hw(entry->irq); irq_set_msi_desc(entry->irq, NULL); irq_dispose_mapping(entry->irq); + entry->irq = 0; msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, ALLOC_CHUNK); } diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index d43d3d1b27ed..83c6ea6a82e0 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c @@ -137,6 +137,7 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev) msi_data = irq_get_chip_data(entry->irq); irq_set_msi_desc(entry->irq, NULL); irq_dispose_mapping(entry->irq); + entry->irq = 0; msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1); } diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c index cfc1c57d760f..26db91c8feff 100644 --- a/arch/powerpc/sysdev/mpic_u3msi.c +++ b/arch/powerpc/sysdev/mpic_u3msi.c @@ -116,6 +116,7 @@ static void u3msi_teardown_msi_irqs(struct pci_dev *pdev) hwirq = virq_to_hw(entry->irq); irq_set_msi_desc(entry->irq, NULL); irq_dispose_mapping(entry->irq); + entry->irq = 0; msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, 1); } -- 2.35.1