On Fri, 2019-06-28 at 06:53:00 UTC, Alexey Kardashevskiy wrote: > The powernv platform uses @dma_iommu_ops for non-bypass DMA. These ops > need an iommu_table pointer which is stored in > dev->archdata.iommu_table_base. It is initialized during > pcibios_setup_device() which handles boot time devices. However when > a device is taken from the system in order to pass it through, the default > IOMMU table is destroyed but the pointer in a device is not updated; > also when a device is returned back to the system, a new table pointer > is not stored in dev->archdata.iommu_table_base either. So when a just > returned device tries using IOMMU, it crashes on accessing stale > iommu_table or its members. > > This calls set_iommu_table_base() when the default window is created. > Note it used to be there before but was wrongly removed (see "fixes"). > It did not appear before as these days most devices simply use bypass. > > This adds set_iommu_table_base(NULL) when a device is taken from > the system to make it clear that IOMMU DMA cannot be used past that point. > > Fixes: c4e9d3c1e65a ("powerpc/powernv/pseries: Rework device adding to IOMMU > groups") > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/5636427d087a55842c1a199dfb839e6545d30e5d cheers