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