[PATCH] agp/amd64: Only try host-bridges when agp_try_unsupported is set

Hans de Goede hansg at kernel.org
Wed Jun 25 11:24:11 UTC 2025


On modern AMD Ryzen systems the IOMMU code initializes early on adding
resources to the "00:00.2 IOMMU" PCI-device without binding a driver to
it (because it needs to run early).

Subsequently trying to bind a driver to it will then fail with -EBUSY
because of this check in drivers/base/dd.c: really_probe():

        dev_dbg(dev, "bus: '%s': %s: probing driver %s with device\n",
                drv->bus->name, __func__, drv->name);
        if (!list_empty(&dev->devres_head)) {
                dev_crit(dev, "Resources present before probing\n");
                ret = -EBUSY;
                goto done;
        }

Notice the dev_crit() logging here, this is a problem because anything
logged at critical or higher level will actually get logged to the console
even when quiet is present breaking flicker free boot and this is happening
on most AMD Ryzen systems, e.g. :

[    1.141358] pci 0000:00:00.0: bus: 'pci': really_probe: probing driver agpgart-amd64 with device
[    1.141441] pci 0000:00:00.2: bus: 'pci': really_probe: probing driver agpgart-amd64 with device
[    1.141444] pci 0000:00:00.2: Resources present before probing
[    1.141450] pci 0000:00:01.0: bus: 'pci': really_probe: probing driver agpgart-amd64 with device
[    1.141496] pci 0000:00:02.0: bus: 'pci': really_probe: probing driver agpgart-amd64 with device

The real issue here is that the agpgart-amd64 driver is probing all
PCI-devices because the match in agp_amd64_pci_promisc_table[] matches all
PCI-devices.

As can be seen from the class matches in agp_amd64_pci_table[], AGP support
is always part of the host-bridge. Change the match in
agp_amd64_pci_promisc_table[] to only match on host-bridges, so that
the IOMMU will no longer get probed with the agpgart-amd64 driver.

This not only fixes the troublesome dev_crit() logging it should also speed
up things in general.

Signed-off-by: Hans de Goede <hansg at kernel.org>
---
Given how old AGP is I would expect the agp_amd64_pci_table[] to be
complete and I wonder if maybe we should not change the default of
the AMD specific agp_try_unsupported to 0? Note the global non AMD
specific agp_try_unsupported_boot flag already defaults to 0.
---
 drivers/char/agp/amd64-agp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c
index bf490967241a..3f9f4fa3a3f5 100644
--- a/drivers/char/agp/amd64-agp.c
+++ b/drivers/char/agp/amd64-agp.c
@@ -721,7 +721,7 @@ static const struct pci_device_id agp_amd64_pci_table[] = {
 MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
 
 static const struct pci_device_id agp_amd64_pci_promisc_table[] = {
-	{ PCI_DEVICE_CLASS(0, 0) },
+	{ PCI_DEVICE_CLASS((PCI_CLASS_BRIDGE_HOST << 8), ~0) },
 	{ }
 };
 
-- 
2.49.0



More information about the dri-devel mailing list