Re: [PATCH v2 1/1] iommu/amd: Enable PCIe ACS only if AMD IOMMU is on

From: Jinhui Guo
Date: Mon Oct 27 2025 - 12:20:00 EST


On Mon, Oct 27, 2025 at 13:30:17 +0100, Jörg Rödel wrote:
> > To preserve PCIe performance, ACS is enabled only when
> > AMD IOMMU is not disabled.
> >
> > Signed-off-by: Jinhui Guo <guojinhui.liam@xxxxxxxxxxxxx>
> > Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
> > ---
> > drivers/iommu/amd/init.c | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
> > index f2991c11867c..38e8c38c5f10 100644
> > --- a/drivers/iommu/amd/init.c
> > +++ b/drivers/iommu/amd/init.c
> > @@ -3314,8 +3314,10 @@ static bool __init detect_ivrs(void)
> > }
> >
> > out:
> > - /* Make sure ACS will be enabled during PCI probe */
> > - pci_request_acs();
> > + if (!amd_iommu_disabled) {
> > + /* Make sure ACS will be enabled during PCI probe */
> > + pci_request_acs();
> > + }

> Instead of checking amd_iommu_disabled here it is better to move the
> pci_request_acs() call to early_amd_iommu_init(). This function is only called
> when amd_iommu_disabled is false and runs still before PCI probing.

A previous attempt (https://lore.kernel.org/all/20250928065817.1279-1-guojinhui.liam@xxxxxxxxxxxxx/)
fails when interrupt-remapping is disabled via CONFIG_IRQ_REMAP=n or intremap=off.

With interrupt remapping off, early_amd_iommu_init() is deferred to rootfs_initcall(pci_iommu_init),
which runs after subsys_initcall(acpi_init) and therefore after pci_enable_acs().

Keep pci_request_acs() in detect_ivrs() to set pci_acs_enable before any PCI device is added,
regardless of the interrupt-remap setting.

PCI devices probe
---
subsys_initcall(acpi_init);
acpi_scan_init()
acpi_bus_scan()
acpi_bus_attach()
acpi_scan_attach_handler()
handler->attach()
acpi_pci_root_add()
pci_acpi_scan_root()
acpi_pci_root_create()
pci_scan_child_bus()
pci_scan_child_bus_extend()
pci_scan_slot()
pci_scan_single_device()
pci_device_add()
pci_init_capabilities()
pci_acs_init()
pci_enable_acs()

AMD IOMMU initialize
---
rootfs_initcall(pci_iommu_init);
x86_init.iommu.iommu_init()
amd_iommu_init()
iommu_go_to_state(IOMMU_INITIALIZED)
state_next()
early_amd_iommu_init()

Regards,
Jinhui