linux/drivers/iommu
Lianbo Jiang 3ab6572916 iommu: use the __iommu_attach_device() directly for deferred attach
Currently, because domain attach allows to be deferred from iommu
driver to device driver, and when iommu initializes, the devices
on the bus will be scanned and the default groups will be allocated.

Due to the above changes, some devices could be added to the same
group as below:

[    3.859417] pci 0000:01:00.0: Adding to iommu group 16
[    3.864572] pci 0000:01:00.1: Adding to iommu group 16
[    3.869738] pci 0000:02:00.0: Adding to iommu group 17
[    3.874892] pci 0000:02:00.1: Adding to iommu group 17

But when attaching these devices, it doesn't allow that a group has
more than one device, otherwise it will return an error. This conflicts
with the deferred attaching. Unfortunately, it has two devices in the
same group for my side, for example:

[    9.627014] iommu_group_device_count(): device name[0]:0000:01:00.0
[    9.633545] iommu_group_device_count(): device name[1]:0000:01:00.1
...
[   10.255609] iommu_group_device_count(): device name[0]:0000:02:00.0
[   10.262144] iommu_group_device_count(): device name[1]:0000:02:00.1

Finally, which caused the failure of tg3 driver when tg3 driver calls
the dma_alloc_coherent() to allocate coherent memory in the tg3_test_dma().

[    9.660310] tg3 0000:01:00.0: DMA engine test failed, aborting
[    9.754085] tg3: probe of 0000:01:00.0 failed with error -12
[    9.997512] tg3 0000:01:00.1: DMA engine test failed, aborting
[   10.043053] tg3: probe of 0000:01:00.1 failed with error -12
[   10.288905] tg3 0000:02:00.0: DMA engine test failed, aborting
[   10.334070] tg3: probe of 0000:02:00.0 failed with error -12
[   10.578303] tg3 0000:02:00.1: DMA engine test failed, aborting
[   10.622629] tg3: probe of 0000:02:00.1 failed with error -12

In addition, the similar situations also occur in other drivers such
as the bnxt_en driver. That can be reproduced easily in kdump kernel
when SME is active.

Let's move the handling currently in iommu_dma_deferred_attach() into
the iommu core code so that it can call the __iommu_attach_device()
directly instead of the iommu_attach_device(). The external interface
iommu_attach_device() is not suitable for handling this situation.

Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/20210126115337.20068-3-lijiang@redhat.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
2021-01-28 13:27:21 +01:00
..
amd iommu/amd: Stop irq_remapping_select() matching when remapping is disabled 2021-01-05 19:24:12 +00:00
arm iommu: arm-smmu-qcom: Add sdm630/msm8998 compatibles for qcom quirks 2021-01-12 15:49:25 +00:00
intel iommu/vt-d: Fix duplicate included linux/dma-map-ops.h 2021-01-12 16:56:20 +00:00
dma-iommu.c iommu: use the __iommu_attach_device() directly for deferred attach 2021-01-28 13:27:21 +01:00
exynos-iommu.c
fsl_pamu_domain.c
fsl_pamu_domain.h
fsl_pamu.c
fsl_pamu.h
hyperv-iommu.c iommu/hyper-v: Remove I/O-APIC ID check from hyperv_irq_remapping_select() 2020-12-02 11:22:55 +01:00
io-pgtable-arm-v7s.c iommu/io-pgtable: Remove tlb_flush_leaf 2020-12-08 15:23:37 +00:00
io-pgtable-arm.c IOMMU updates for 5.11 2020-12-16 13:58:47 -08:00
io-pgtable-arm.h
io-pgtable.c
ioasid.c iommu/ioasid: Add ioasid references 2020-11-23 14:16:55 +00:00
iommu-debugfs.c
iommu-sva-lib.c iommu/sva: Add PASID helpers 2020-11-23 14:16:55 +00:00
iommu-sva-lib.h iommu/sva: Add PASID helpers 2020-11-23 14:16:55 +00:00
iommu-sysfs.c
iommu-traces.c
iommu.c iommu: use the __iommu_attach_device() directly for deferred attach 2021-01-28 13:27:21 +01:00
iova.c iova: Stop exporting some more functions 2021-01-27 12:28:58 +01:00
ipmmu-vmsa.c iommu/io-pgtable: Remove tlb_flush_leaf 2020-12-08 15:23:37 +00:00
irq_remapping.c
irq_remapping.h
Kconfig iommu/arm-smmu-v3: Implement iommu_sva_bind/unbind() 2020-11-23 14:16:55 +00:00
Makefile iommu/sva: Add PASID helpers 2020-11-23 14:16:55 +00:00
msm_iommu_hw-8xxx.h
msm_iommu.c iommu/io-pgtable: Remove tlb_flush_leaf 2020-12-08 15:23:37 +00:00
msm_iommu.h
mtk_iommu_v1.c
mtk_iommu.c iommu/io-pgtable: Remove tlb_flush_leaf 2020-12-08 15:23:37 +00:00
mtk_iommu.h
of_iommu.c
omap-iommu-debug.c
omap-iommu.c
omap-iommu.h
omap-iopgtable.h
rockchip-iommu.c
s390-iommu.c
sun50i-iommu.c
tegra-gart.c
tegra-smmu.c iommu/tegra-smmu: Add PCI support 2020-11-25 11:04:41 +00:00
virtio-iommu.c