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

Alex Deucher alexdeucher at gmail.com
Wed Jun 25 13:11:15 UTC 2025


+ Suravee and Vasant

On Wed, Jun 25, 2025 at 7:24 AM Hans de Goede <hansg at kernel.org> wrote:
>
> 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.

No objections from me.

Alex

> ---
>  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