Re: [PATCH 0/2] Introduce PCI_FIXUP_IOMMU

From: Zhangfei Gao
Date: Tue Jun 23 2020 - 03:48:51 EST


Hi, Joerg

On 2020/6/22 äå7:55, Joerg Roedel wrote:
On Thu, Jun 04, 2020 at 09:33:07PM +0800, Zhangfei Gao wrote:
+++ b/drivers/iommu/iommu.c
@@ -2418,6 +2418,10 @@ int iommu_fwspec_init(struct device *dev, struct
fwnode_handle *iommu_fwnode,
ÂÂÂÂÂÂÂ fwspec->iommu_fwnode = iommu_fwnode;
ÂÂÂÂÂÂÂ fwspec->ops = ops;
ÂÂÂÂÂÂÂ dev_iommu_fwspec_set(dev, fwspec);
+
+ÂÂÂÂÂÂ if (dev_is_pci(dev))
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ pci_fixup_device(pci_fixup_final, to_pci_dev(dev));
+
That's not going to fly, I don't think we should run the fixups twice,
and they should not be run from IOMMU code. Is the only reason for this
second pass that iommu_fwspec is not yet allocated when it runs the
first time? I ask because it might be easier to just allocate the struct
earlier then.
Thanks for looking this.

Yes, it is the only reason calling fixup secondly after iommu_fwspec is allocated.

The first time fixup final is very early in pci_bus_add_device.
If allocating iommu_fwspec earlier, it maybe in pci_alloc_dev.
And assigning ops still in iommu_fwspec_init.
Have tested it works.
Not sure is it acceptable?

Alternatively, adding can_stall to struct pci_dev is simple but ugly too,
since pci does not know stall now.


Thanks