On Sun, 16 Mar 2025 at 02:45, Bjorn Helgaas <helgaas@xxxxxxxxxx> wrote: > > On Sat, Mar 15, 2025 at 10:13:19AM +0000, Zhangfei Gao wrote: > > The commit bcb81ac6ae3c ("iommu: Get DT/ACPI parsing into the proper > > probe path") changes the arm_smmu_probe_device() sequence. > > > The arm_smmu_probe_device() is now called earlier via pci_device_add(), > > which calls pci_fixup_device() at the "pci_fixup_header" phase, while > > originally it was called from the pci_bus_add_device(), which called > > pci_fixup_device() at the "pci_fixup_final" phase. > > > > The callstack before: > > [ 1121.314405] arm_smmu_probe_device+0x48/0x450 > > [ 1121.314410] __iommu_probe_device+0xc4/0x3c8 > > [ 1121.314412] iommu_probe_device+0x40/0x90 > > [ 1121.314414] acpi_dma_configure_id+0xb4/0x100 > > [ 1121.314417] pci_dma_configure+0xf8/0x108 > > [ 1121.314421] really_probe+0x78/0x278 > > [ 1121.314425] __driver_probe_device+0x80/0x140 > > [ 1121.314427] driver_probe_device+0x48/0x130 > > [ 1121.314430] __device_attach_driver+0xc0/0x108 > > [ 1121.314432] bus_for_each_drv+0x8c/0xf8 > > [ 1121.314435] __device_attach+0x104/0x1a0 > > [ 1121.314437] device_attach+0x1c/0x30 > > [ 1121.314440] pci_bus_add_device+0xb8/0x1f0 > > [ 1121.314442] pci_iov_add_virtfn+0x2ac/0x300 > > > > And after: > > [ 215.072859] arm_smmu_probe_device+0x48/0x450 > > [ 215.072871] __iommu_probe_device+0xc0/0x468 > > [ 215.072875] iommu_probe_device+0x40/0x90 > > [ 215.072877] iommu_bus_notifier+0x38/0x68 > > [ 215.072879] notifier_call_chain+0x80/0x148 > > [ 215.072886] blocking_notifier_call_chain+0x50/0x80 > > [ 215.072889] bus_notify+0x44/0x68 > > [ 215.072896] device_add+0x580/0x768 > > [ 215.072898] pci_device_add+0x1e8/0x568 > > [ 215.072906] pci_iov_add_virtfn+0x198/0x300 > > The stacktraces definitely help connect the dots but don't integrate > the fixup phases and the timestamps are unnecessary distraction. > > I would omit all the above except the first paragraph and include > something like this instead, which shows how arm_smmu_probe_device() > was previously after final fixups and is now between header and final > fixups: > > pci_iov_add_virtfn > pci_device_add > pci_fixup_device(pci_fixup_header) <-- > device_add > bus_notify > iommu_bus_notifier > + iommu_probe_device > + arm_smmu_probe_device > pci_bus_add_device > pci_fixup_device(pci_fixup_final) <-- > device_attach > driver_probe_device > really_probe > pci_dma_configure > acpi_dma_configure_id > - iommu_probe_device > - arm_smmu_probe_device > > This is the pci_iov_add_virtfn(). The non-SR-IOV case is similar in > that pci_device_add() is called from pci_scan_single_device() in the > generic enumeration path, and pci_bus_add_device() is called later, > after all a host bridge has been enumerated. Thanks Bjorn Will update in v3. One thing is the probe sequence change is the fixing result, not newly added. iommu_bus_notifier iommu_probe_device __iommu_probe_device ops = iommu_fwspec_ops(dev_iommu_fwspec_get(dev)); if (!ops) return -ENODEV; This calling sequence existed before but returned here since ops = NULL. It is fixed in the commit bcb81ac6ae3c, so arm_smmu_probe_device happens earlier and quicker. > > > Fixes: bcb81ac6ae3c ("iommu: Get DT/ACPI parsing into the proper probe path") > > Signed-off-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxx> > > [kwilczynski: commit log] > > Signed-off-by: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx> > > You should never include somebody else's Signed-off-by below yours. > You should only add *your own* Signed-off-by: OK > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?id=v6.13#n396 > > Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> Thanks