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;