[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87wm7ch5of.fsf@yellow.woof>
Date: Sat, 09 Aug 2025 17:32:16 +0200
From: Nam Cao <namcao@...utronix.de>
To: Ammar Faizi <ammarfaizi2@...weeb.org>
Cc: Thomas Gleixner <tglx@...utronix.de>, Lukas Wunner <lukas@...ner.de>,
Bjorn Helgaas <helgaas@...nel.org>, Linus Torvalds
<torvalds@...ux-foundation.org>, Linux PCI Mailing List
<linux-pci@...r.kernel.org>, Linux Kernel Mailing List
<linux-kernel@...r.kernel.org>, Rob Herring <robh@...nel.org>, Lorenzo
Pieralisi <lorenzo.pieralisi@....com>, Manivannan Sadhasivam
<mani@...nel.org>, Krzysztof Wilczynski <kwilczynski@...nel.org>, Armando
Budianto <sprite@...weeb.org>, Alviro Iskandar Setiawan
<alviro.iskandar@...weeb.org>, gwml@...r.gnuweeb.org, namcaov@...il.com
Subject: Re: [GIT PULL v2] PCI changes for v6.17
Ammar Faizi <ammarfaizi2@...weeb.org> writes:
> Here's the result after reverting those two commits and applied the diff.
>
> https://gist.github.com/ammarfaizi2/03c7a9c0fec2a11f206931f1b7790709#file-dmesg_pci_debug_002-txt
>
> Let's see if this one is enough for you to diagnose the problem.
Thanks, I think the problem is clear now.
The diff I sent you has a mistake, it should be
if (pci_msix_vec_count(pci_dev) < 0)
not
if (!pci_msix_vec_count(pci_dev))
So the log is wrong, it printed "MSI-X, looking good...". It should have
printed the other one.
But no need to re-run it, the backtrace is enough.
MSI-X, looking good... <-------- wrong log
CPU: 3 UID: 0 PID: 183 Comm: systemd-udevd Not tainted 6.16.0-afh2-dbg-2025-08-09-gb622ab28bcac #13 PREEMPT(full) 28137b57996795286f6544f071ec852674a057d4
Hardware name: HP HP Laptop 14s-dq2xxx/87FD, BIOS F.21 03/21/2022
Call Trace:
<TASK>
dump_stack_lvl
vmd_msi_init
msi_domain_alloc
irq_domain_alloc_irqs_locked
__irq_domain_alloc_irqs
__msi_domain_alloc_irqs
msi_domain_alloc_irqs_all_locked
__msi_capability_init
__pci_enable_msi_range
pci_alloc_irq_vectors_affinity
pcie_portdrv_probe
So unlike what VMD doc says, it actually can have non-MSI-X children devices!
Please discard the reverts and the diff I sent you, and try the diff
below. I believe your machine will work now.
diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
index b679c7f28f51..1bd5bf4a6097 100644
--- a/drivers/pci/controller/vmd.c
+++ b/drivers/pci/controller/vmd.c
@@ -306,9 +306,6 @@ static bool vmd_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
struct irq_domain *real_parent,
struct msi_domain_info *info)
{
- if (WARN_ON_ONCE(info->bus_token != DOMAIN_BUS_PCI_DEVICE_MSIX))
- return false;
-
if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info))
return false;
Powered by blists - more mailing lists