[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20251027161617.4020-1-guojinhui.liam@bytedance.com>
Date: Tue, 28 Oct 2025 00:16:17 +0800
From: Jinhui Guo <guojinhui.liam@...edance.com>
To: joro@...tes.org
Cc: guojinhui.liam@...edance.com,
iommu@...ts.linux.dev,
linux-kernel@...r.kernel.org,
suravee.suthikulpanit@....com
Subject: Re: [PATCH v2 1/1] iommu/amd: Enable PCIe ACS only if AMD IOMMU is on
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@...edance.com>
> > Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@....com>
> > ---
> > 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@bytedance.com/)
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
Powered by blists - more mailing lists