[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <qe23hkpdr6ui4mgjke2wp2pl3jmgcauzgrdxqq4olgrkbfy25d@avy6c6mg334s>
Date: Wed, 27 Aug 2025 07:28:46 +0800
From: Inochi Amaoto <inochiama@...il.com>
To: Anders Roxell <anders.roxell@...aro.org>,
Nathan Chancellor <nathan@...nel.org>, Inochi Amaoto <inochiama@...il.com>, regressions@...ts.linux.dev,
linux-next@...r.kernel.org
Cc: Thomas Gleixner <tglx@...utronix.de>,
Bjorn Helgaas <bhelgaas@...gle.com>, Marc Zyngier <maz@...nel.org>,
Lorenzo Pieralisi <lpieralisi@...nel.org>, Shradha Gupta <shradhagupta@...ux.microsoft.com>,
Haiyang Zhang <haiyangz@...rosoft.com>, Jonathan Cameron <Jonathan.Cameron@...ei.com>,
Juergen Gross <jgross@...e.com>, Nicolin Chen <nicolinc@...dia.com>,
Jason Gunthorpe <jgg@...pe.ca>, Chen Wang <unicorn_wang@...look.com>,
linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org, Yixun Lan <dlan@...too.org>,
Longbin Li <looong.bin@...il.com>, arnd@...db.de, dan.carpenter@...aro.org,
naresh.kamboju@...aro.org, benjamin.copeland@...aro.org
Subject: Re: [PATCH v2 2/4] PCI/MSI: Add startup/shutdown for per device
domains
On Wed, Aug 27, 2025 at 06:33:44AM +0800, Inochi Amaoto wrote:
> On Tue, Aug 26, 2025 at 09:45:48PM +0200, Anders Roxell wrote:
> > On 2025-08-14 07:28, Inochi Amaoto wrote:
> > > As the RISC-V PLIC can not apply affinity setting without calling
> > > irq_enable(), it will make the interrupt unavailble when using as
> > > an underlying IRQ chip for MSI controller.
> > >
> > > Implement .irq_startup() and .irq_shutdown() for the PCI MSI and
> > > MSI-X templates. For chips that specify MSI_FLAG_PCI_MSI_STARTUP_PARENT,
> > > these startup and shutdown the parent as well, which allows the
> > > irq on the parent chip to be enabled if the irq is not enabled
> > > when allocating. This is necessary for the MSI controllers which
> > > use PLIC as underlying IRQ chip.
> > >
> > > Suggested-by: Thomas Gleixner <tglx@...utronix.de>
> > > Signed-off-by: Inochi Amaoto <inochiama@...il.com>
> >
> > Regressions found while booting the Linux next-20250826 on the
> > qemu-arm64, qemu-armv7 due to following kernel log.
> >
> > Bisection identified this commit as the cause of the regression.
> >
> > Regression Analysis:
> > - New regression? Yes
> > - Reproducible? Yes
> >
> > First seen on the next-20250826
> > Good: next-20250825
> > Bad: next-20250826
> >
> > Test regression: next-20250826 gcc-13 boot failed on qemu-arm64 and
> > qemu-armv7.
> >
> > Expected behavior: System should boot normally and virtio block devices
> > should be detected and initialized immediately.
> >
> > Actual behavior: System hangs for ~30 seconds during virtio block device
> > initialization before showing scheduler deadline replenish errors and
> > failing to complete boot.
> >
> > Reported-by: Linux Kernel Functional Testing <lkft@...aro.org>
> >
> > [...]
> > <6>[ 1.369038] virtio-pci 0000:00:01.0: enabling device (0000 ->
> > 0003)
> > <6>[ 1.420097] Serial: 8250/16550 driver, 4 ports, IRQ sharing
> > enabled
> > <6>[ 1.450858] msm_serial: driver initialized
> > <6>[ 1.454489] SuperH (H)SCI(F) driver initialized
> > <6>[ 1.456056] STM32 USART driver initialized
> > <6>[ 1.513325] loop: module loaded
> > <6>[ 1.515744] virtio_blk virtio0: 2/0/0 default/read/poll queues
> > <5>[ 1.527859] virtio_blk virtio0: [vda] 5397504 512-byte logical
> > blocks (2.76 GB/2.57 GiB)
> > <4>[ 29.761219] sched: DL replenish lagged too much
> > [here it hangs]
> >
> >
> > Reverting this commit restores normal boot behavior.
> >
> >
> > qemu-arm64
> > - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20250826/testrun/29663822/suite/boot/test/gcc-13-lkftconfig/log
> >
> > qemu-armv7
> > - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20250826/testrun/29663615/suite/boot/test/gcc-13-lkftconfig/log
> >
> > ## Source
> > * Git tree:
> > * https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next.git
> > * Git sha: d0630b758e593506126e8eda6c3d56097d1847c5
> > * Git describe: next-20250826
> > * Project details: https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20250826
> > * Architectures: arm64
> > * Toolchains: gcc-13
> > * Kconfigs: gcc-13-lkftconfig
> >
> >
> > ## Build
> > * Test history: https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20250826/testrun/29663822/suite/boot/test/gcc-13-lkftconfig/history/
> > * Test link: https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/31oo1cMOi0uSNKYApi80iQahbLi
> > * Build link: https://storage.tuxsuite.com/public/linaro/lkft/builds/31onzS5UmJVvvZucEhtB1veoJA1/
> > * Kernel config: https://storage.tuxsuite.com/public/linaro/lkft/builds/31onzS5UmJVvvZucEhtB1veoJA1/config
> >
>
> Is there a link for me to get the command line args for qemu? So I can
> reproduce it locally.
>
OK, I guess I know why: I have missed one condition for startup.
Could you test the following patch? If worked, I will send it as
a fix.
---
diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
index e0a800f918e8..b11b7f63f0d6 100644
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -154,6 +154,8 @@ static void cond_shutdown_parent(struct irq_data *data)
if (unlikely(info->flags & MSI_FLAG_PCI_MSI_STARTUP_PARENT))
irq_chip_shutdown_parent(data);
+ else if (unlikely(info->flags & MSI_FLAG_PCI_MSI_MASK_PARENT))
+ irq_chip_mask_parent(data);
}
static unsigned int cond_startup_parent(struct irq_data *data)
@@ -162,6 +164,9 @@ static unsigned int cond_startup_parent(struct irq_data *data)
if (unlikely(info->flags & MSI_FLAG_PCI_MSI_STARTUP_PARENT))
return irq_chip_startup_parent(data);
+ else if (unlikely(info->flags & MSI_FLAG_PCI_MSI_MASK_PARENT))
+ irq_chip_unmask_parent(data);
+
return 0;
}
Powered by blists - more mailing lists