On Tue, Oct 08, 2019 at 04:18:37PM -0600, Logan Gunthorpe wrote: > -static struct irq_remap_table *alloc_irq_table(u16 devid) > +static int set_remap_table_entry_alias(struct pci_dev *pdev, u16 alias, > + void *data) > +{ > + struct irq_remap_table *table = data; > + > + irq_lookup_table[alias] = table; > + set_dte_irq_entry(alias, table); > + > + return 0; > +} > + > +static int iommu_flush_dte_alias(struct pci_dev *pdev, u16 alias, void *data) > +{ > + struct amd_iommu *iommu = data; > + > + iommu_flush_dte(iommu, alias); > + > + return 0; > +}
I think these two functions can be merged into one, saving one pci_for_each_dma_alias() call below. You can lookup the iommu using the amd_iommu_rlookup_table[alias] in the first function and issue the flush there. Regards, Joerg