On Thu, Sep 14, 2023 at 09:33:54PM -0500, Mario Limonciello wrote: > +static bool child_has_amd_usb4(struct pci_dev *pdev) > +{ > + struct pci_dev *child = NULL; > + > + while ((child = pci_get_class(PCI_CLASS_SERIAL_USB_USB4, child))) { > + if (child->vendor != PCI_VENDOR_ID_AMD) > + continue; > + if (pcie_find_root_port(child) != pdev) > + continue; > + return true; > + } > + > + return false; > +} What's the purpose of the pcie_find_root_port() check? PCI is a hierarchy, not a graph, so a device cannot have any other Root Port but the one below which you're searching. If the purpose is to check that the port is a Root Port (if the PCI IDs you're using in the DECLARE_PCI_FIXUP_* clauses match non-Root Ports), check for pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT. (No need to check for that in every loop iteration obviously, just check once in the fixup.) Thanks, Lukas