Re: [GIT PULL v2] PCI changes for v6.17

From: Nam Cao
Date: Sat Aug 09 2025 - 11:32:30 EST


Ammar Faizi <ammarfaizi2@xxxxxxxxxxx> 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;