Received: by 2002:a05:6358:f14:b0:e5:3b68:ec04 with SMTP id b20csp15044rwj; Sat, 17 Dec 2022 03:29:06 -0800 (PST) X-Google-Smtp-Source: AA0mqf7OEsjmMKaOGK3Bee2bgAQ9EI1ZfPwdL+4Cl7IA4jZcXY96koS1lMbzNsbwd1s8qwhJAcw2 X-Received: by 2002:a17:90a:a894:b0:219:8e37:3d81 with SMTP id h20-20020a17090aa89400b002198e373d81mr36679032pjq.14.1671276546454; Sat, 17 Dec 2022 03:29:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671276546; cv=none; d=google.com; s=arc-20160816; b=t7d6oX7htuds7BPQ/NKRNPQXCP2HojEg/p4nV1L12IuN3E95o+8Y0dJwNW1xto/+Ug cirLgymUOFdrUHlnoc7jSbU8LUXh4yTPXqviMmti/LW2/EyEbnfaK/3S5QLplSIVVe5R wgvcmCHvywaxbKmSyNgty5VUThNtSkG+1tY/NKeni0X/LNHH1vbs+jXXtFbUH+15IeL4 bmhLxXhkGa0CasEE+It93E7Tdu6tYSqBnMPgnous7PF357tlGiR7EA9mmisIFWIafdrZ 8piE5XJJ9RqWsJMMEDiTdjmRObXBIKaiAIhWBbdOabOIfrxmq2/UWPqkOUeu2vwzCchC krkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:references:in-reply-to :subject:cc:to:from:message-id:date:dkim-signature; bh=zA3Y0whaA6poglYMdAX+9aMEYow7dVfjtQbBTHB76ro=; b=N6gMC2gfzoqM1fTSMECXtBBeD5dRpeOE3JqsvOiCJ3S6fwgSR5Pi+UoXdypUPha6Mw H3H3XL3Jwa42wmoUZ1+zfWeRxRWu7D8bHwKPVYHdZkR/bgZJT0aqs8yJzbYLEMdrJ1YB I7F86mXDZpAZnMFErSA0emGhYSLBYzVr1KEksdSqbdolD/t3fDNf5IxNmYmzWyHm/MRg KQaYy0MpLRj1D4XZg3NFZSH7vFv05dD/J9/lrUFdcyYMTzZT9AWb7QDzTdWNmdkXqXT7 4XmOVIGwId8PZhvaW/kI7BxMrTVVCeqiW7702NT/tfoXmBk8kdNKqrF9f1ZF6SI+zp3g T7ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=hXokkd6P; 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 lw1-20020a17090b180100b002136ad22b32si5905367pjb.39.2022.12.17.03.28.57; Sat, 17 Dec 2022 03:29:06 -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=hXokkd6P; 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 S230123AbiLQKqo (ORCPT + 69 others); Sat, 17 Dec 2022 05:46:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229979AbiLQKqm (ORCPT ); Sat, 17 Dec 2022 05:46:42 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA47111A3A; Sat, 17 Dec 2022 02:46:38 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 21A9F60A3D; Sat, 17 Dec 2022 10:46:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5AD13C433D2; Sat, 17 Dec 2022 10:46:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1671273997; bh=iR31Dq/SeLyIivOuFDUbSh/oz4DtQ/n2rgqet3GCxwo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=hXokkd6PwtssV2fR67WHZ+c3+JHW0ld/mkJjEGyXaz9BL+eqkDizAyqrSPBcr/N85 BzGrYGVZ+mpchCShp0GXxx3iu10EspnY5IfU/Le4u9ou0/ehH047D7liGQmxB/kn2D Qn1MPuQGcOE1FYj5d9ScdlxjBjPGtSX91tqBY+EaFqUWonE8dZ80lKgqNGl3eXNJBU UK4gZ31rxoV1YrX0jyxpqJwbBBvIA5prxhwoEu53MRmzZEg+Oh4T9sz8nnwAOgMNkZ oRKYHQc5yR6Rk8Gfa5Num2kS1KICgXfR95LTJ3Tm+3XGJvoCCfrH4XU7QzwDjkFHcB yb8QF8S0+sOXQ== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1p6UiA-00DGas-Sa; Sat, 17 Dec 2022 10:46:35 +0000 Date: Sat, 17 Dec 2022 10:46:34 +0000 Message-ID: <86sfhepat1.wl-maz@kernel.org> From: Marc Zyngier To: Guenter Roeck Cc: Matthew Rosato , Thomas Gleixner , Niklas Schnelle , LKML , x86@kernel.org, Joerg Roedel , Will Deacon , linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Greg Kroah-Hartman , Jason Gunthorpe , Dave Jiang , Alex Williamson , Kevin Tian , Dan Williams , Logan Gunthorpe , Ashok Raj , Jon Mason , Allen Hubbe , Michael Ellerman , Nicholas Piggin , Christophe Leroy Subject: Re: [patch V3 09/33] genirq/msi: Add range checking to msi_insert_desc() In-Reply-To: <70dab88e-6119-0c12-7c6a-61bcbe239f66@roeck-us.net> References: <20221124230505.073418677@linutronix.de> <20221124232325.798556374@linutronix.de> <20221213190425.GA3943240@roeck-us.net> <4e0a129855490febb1c57e7e979bcfb579d39054.camel@linux.ibm.com> <87fsdgzpqs.ffs@tglx> <86wn6rptdu.wl-maz@kernel.org> <0acb8c63-7f6c-6df6-cb40-66b265a6e6ce@linux.ibm.com> <86v8mbphzw.wl-maz@kernel.org> <70dab88e-6119-0c12-7c6a-61bcbe239f66@roeck-us.net> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/27.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux@roeck-us.net, mjrosato@linux.ibm.com, tglx@linutronix.de, schnelle@linux.ibm.com, linux-kernel@vger.kernel.org, x86@kernel.org, joro@8bytes.org, will@kernel.org, linux-pci@vger.kernel.org, bhelgaas@google.com, lorenzo.pieralisi@arm.com, gregkh@linuxfoundation.org, jgg@mellanox.com, dave.jiang@intel.com, alex.williamson@redhat.com, kevin.tian@intel.com, dan.j.williams@intel.com, logang@deltatee.com, ashok.raj@intel.com, jdmason@kudzu.us, allenbh@gmail.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false 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 On Sat, 17 Dec 2022 00:45:50 +0000, Guenter Roeck wrote: > > On 12/16/22 05:58, Marc Zyngier wrote: > [ ... ] > > >> With both these fixes applied, it actually then leads to the very > >> next WARN_ON failing in msi_ctrl_valid... Because ctrl->last == > >> hwsize. I think Thomas' initial fix for msi_domain_get_hwsize has > >> an off-by-1 error, I think we should return MSI_XA_DOMAIN_SIZE for > >> msi_domain_get_hwsize instead. > > > > Yes, that's a good point, and that's consistent with what > > __msi_create_irq_domain() does already, assuming MSI_XA_DOMAIN_SIZE > > when info->hwsize is 0. No reason to do something else here. > > > > I'll update Thomas' patch. Once Guenter confirms that PPC is OK, I'll > > send it out. > > > With > > 7a27b6136dcb (local/testing, testing-msi) genirq/msi: Return MSI_XA_DOMAIN_SIZE as the maximum MSI index when no domain is present > c581d525bb1d genirq/msi: Check for the presence of an irq domain when validating msi_ctrl > 9d33edb20f7e Merge tag 'irq-core-2022-12-10' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip > > I still get the following runtime warning. > > ------------[ cut here ]------------ > WARNING: CPU: 0 PID: 8 at kernel/irq/msi.c:196 .msi_domain_free_descs+0x144/0x170 > Modules linked in: > CPU: 0 PID: 8 Comm: kworker/u2:0 Tainted: G N 6.1.0-01957-g7a27b6136dcb #1 > Hardware name: QEMU ppce500 e5500 0x80240020 QEMU e500 > Workqueue: nvme-reset-wq .nvme_reset_work > NIP: c000000000107d54 LR: c000000000107d44 CTR: 0000000000000000 > REGS: c0000000041e74d0 TRAP: 0700 Tainted: G N (6.1.0-01957-g7a27b6136dcb) > MSR: 0000000080029002 CR: 44002282 XER: 20000000 > IRQMASK: 0 > GPR00: c000000000107d44 c0000000041e7770 c000000001629c00 c000000004e748a0 > GPR04: 000000005358db0a c000000001ce7a00 c00000000423b5d0 000000004735aaa2 > GPR08: 0000000000000002 0000000000000013 c00000000423acc0 c00000000214a998 > GPR12: 0000000024002282 c000000002579000 c00000000008e190 c000000004173540 > GPR16: 0000000000000000 c0000000043810b8 0000000000000000 0000000000000001 > GPR20: c0000000060b22d8 c0000000060a70f0 0000000000000000 c000000001996800 > GPR24: c0000000017df6c0 c0000000043810b8 c0000000060b2388 c0000000060b2000 > GPR28: ffffffffffffffff c0000000041e7888 c000000006025ac8 c000000004e748a0 > NIP [c000000000107d54] .msi_domain_free_descs+0x144/0x170 > LR [c000000000107d44] .msi_domain_free_descs+0x134/0x170 > Call Trace: > [c0000000041e7770] [c000000000107d44] .msi_domain_free_descs+0x134/0x170 (unreliable) > [c0000000041e7810] [c0000000001085d8] .msi_domain_free_msi_descs_range+0x38/0x70 > [c0000000041e78a0] [c0000000008d000c] .pci_msi_teardown_msi_irqs+0x4c/0xa0 > [c0000000041e7920] [c0000000008cf9e8] .pci_free_msi_irqs+0x18/0x50 > [c0000000041e79a0] [c0000000008cd8d0] .pci_free_irq_vectors+0x80/0xb0 > [c0000000041e7a20] [c000000000a6d2a0] .nvme_reset_work+0x870/0x1780 > [c0000000041e7bb0] [c000000000080e68] .process_one_work+0x2d8/0x7b0 > [c0000000041e7c90] [c0000000000813d8] .worker_thread+0x98/0x4f0 > [c0000000041e7d70] [c00000000008e2cc] .kthread+0x13c/0x150 > [c0000000041e7e10] [c0000000000005d8] .ret_from_kernel_thread+0x58/0x60 > Instruction dump: > 7fc3f378 48ff1ca9 60000000 7c7f1b79 41c2002c e8810070 7fc3f378 48ff3491 > 60000000 813f0000 2c090000 41e2ffb0 <0fe00000> 60000000 60000000 ebc10090 > irq event stamp: 98168 > hardirqs last enabled at (98167): [] ._raw_spin_unlock_irqrestore+0x84/0xd0 > hardirqs last disabled at (98168): [] .program_check_exception+0x38/0x120 > softirqs last enabled at (97760): [] .__do_softirq+0x60c/0x678 > softirqs last disabled at (97749): [] .do_softirq_own_stack+0x30/0x50 > ---[ end trace 0000000000000000 ]--- > nvme nvme0: 1/0/0 default/read/poll queues > nvme nvme0: Ignoring bogus Namespace Identifiers > ... > > The system boots fine, though. This is seen when booting the ppce500 > machine with e5500 CPU and corenet64_smp_defconfig from nvme. +PPC folks. Thanks for the report. I managed to reproduce this, although in a limited way (a SMP qemu instance wouldn't boot at all). The problem is that the core MSI code now assumes that if the arch code is in charge of breaking the association of a MSI with a device, it is also in charge of clearing the irq in the MSI descriptor. This matches the s390 behaviour, but not powerpc's, hence the splat and the leaked MSI descriptors. The minimal fix should be as follow, which I'll add to the pile of patches. Thanks, M. diff --git a/arch/powerpc/platforms/4xx/hsta_msi.c b/arch/powerpc/platforms/4xx/hsta_msi.c index d4f7fff1fc87..e11b57a62b05 100644 --- a/arch/powerpc/platforms/4xx/hsta_msi.c +++ b/arch/powerpc/platforms/4xx/hsta_msi.c @@ -115,6 +115,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 5b012abca773..0c11aad896c7 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c @@ -289,6 +289,7 @@ static void axon_msi_teardown_msi_irqs(struct pci_dev *dev) msi_for_each_desc(entry, &dev->dev, MSI_DESC_ASSOCIATED) { 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 dc1846660005..166c97fff16d 100644 --- a/arch/powerpc/platforms/pasemi/msi.c +++ b/arch/powerpc/platforms/pasemi/msi.c @@ -66,6 +66,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 73c2d70706c0..57978a44d55b 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c @@ -132,6 +132,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 1d8cfdfdf115..492cb03c0b62 100644 --- a/arch/powerpc/sysdev/mpic_u3msi.c +++ b/arch/powerpc/sysdev/mpic_u3msi.c @@ -108,6 +108,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); } } -- Without deviation from the norm, progress is not possible.