linux/drivers/iommu
Joerg Roedel 4bf5beef57 iommu/amd: Don't put completion-wait semaphore on stack
The semaphore used by the AMD IOMMU to signal command
completion lived on the stack until now, which was safe as
the driver busy-waited on the semaphore with IRQs disabled,
so the stack can't go away under the driver.

But the recently introduced vmap-based stacks break this as
the physical address of the semaphore can't be determinded
easily anymore. The driver used the __pa() macro, but that
only works in the direct-mapping. The result were
Completion-Wait timeout errors seen by the IOMMU driver,
breaking system boot.

Since putting the semaphore on the stack is bad design
anyway, move the semaphore into 'struct amd_iommu'. It is
protected by the per-iommu lock and now in the direct
mapping again. This fixes the Completion-Wait timeout errors
and makes AMD IOMMU systems boot again with vmap-based
stacks enabled.

Reported-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-09-15 11:28:19 +02:00
..
amd_iommu_init.c iommu/amd: Fix unity mapping initialization race 2016-07-06 18:04:55 +02:00
amd_iommu_proto.h
amd_iommu_types.h iommu/amd: Don't put completion-wait semaphore on stack 2016-09-15 11:28:19 +02:00
amd_iommu_v2.c IOMMU Updates for Linux v4.8 2016-08-01 07:25:10 -04:00
amd_iommu.c iommu/amd: Don't put completion-wait semaphore on stack 2016-09-15 11:28:19 +02:00
arm-smmu-v3.c iommu/arm-smmu: Don't BUG() if we find aborting STEs with disable_bypass 2016-08-19 09:48:15 +01:00
arm-smmu.c iommu/arm-smmu: Disable stalling faults for all endpoints 2016-08-19 09:48:01 +01:00
dma-iommu.c iommu/dma: Respect IOMMU aperture when allocating 2016-08-10 12:02:02 +02:00
dmar.c IOMMU Updates for Linux v4.8 2016-08-01 07:25:10 -04:00
exynos-iommu.c iommu/exynos: update to use iommu big-endian 2016-06-21 11:59:03 +02:00
fsl_pamu_domain.c
fsl_pamu_domain.h
fsl_pamu.c
fsl_pamu.h
intel_irq_remapping.c SVM fixes for Linux 4.5 2016-02-16 08:04:06 -08:00
intel-iommu.c dma-mapping: use unsigned long for dma_attrs 2016-08-04 08:50:07 -04:00
intel-svm.c mm: do not pass mm_struct into handle_mm_fault 2016-07-26 16:19:19 -07:00
io-pgtable-arm-v7s.c iommu/io-pgtable-arm-v7s: Fix attributes when splitting blocks 2016-08-19 09:40:16 +01:00
io-pgtable-arm.c iommu/io-pgtable-arm: Fix iova_to_phys for block entries 2016-07-01 14:04:37 +01:00
io-pgtable.c iommu/io-pgtable: Fix a brace coding style issue. 2016-04-05 15:34:29 +02:00
io-pgtable.h iommu/io-pgtable: Add MTK 4GB mode in Short-descriptor 2016-04-05 15:39:37 +02:00
iommu-sysfs.c
iommu-traces.c
iommu.c Merge branches 'x86/amd', 'x86/vt-d', 'arm/exynos', 'arm/mediatek', 'arm/msm', 'arm/rockchip', 'arm/smmu' and 'core' into next 2016-07-26 16:02:37 +02:00
iova.c iommu/iova: Disable preemption around use of this_cpu_ptr() 2016-06-27 13:07:45 +02:00
ipmmu-vmsa.c Merge branches 's390', 'arm/renesas', 'arm/msm', 'arm/shmobile', 'arm/smmu', 'x86/amd' and 'x86/vt-d' into next 2016-01-19 15:30:43 +01:00
irq_remapping.c x86/cpufeature: Replace cpu_has_apic with boot_cpu_has() usage 2016-04-13 11:37:41 +02:00
irq_remapping.h
Kconfig Merge branches 'x86/amd', 'x86/vt-d', 'arm/exynos', 'arm/mediatek', 'arm/msm', 'arm/rockchip', 'arm/smmu' and 'core' into next 2016-07-26 16:02:37 +02:00
Makefile Merge branches 'x86/amd', 'x86/vt-d', 'arm/exynos', 'arm/mediatek', 'arm/msm', 'arm/rockchip', 'arm/smmu' and 'core' into next 2016-07-26 16:02:37 +02:00
msm_iommu_hw-8xxx.h
msm_iommu.c iommu/msm: use generic ARMV7S short descriptor pagetable ops 2016-06-21 13:57:13 +02:00
msm_iommu.h iommu/msm: Add DT adaptation 2016-06-21 13:56:00 +02:00
mtk_iommu_v1.c iommu/mediatek: Make mtk_iommu_pm_ops static 2016-06-21 11:54:06 +02:00
mtk_iommu.c iommu/mediatek: move the common struct into header file 2016-06-21 11:36:19 +02:00
mtk_iommu.h iommu/mediatek: Mark static functions in headers inline 2016-08-09 15:46:46 +02:00
of_iommu.c of: iommu: make of_iommu_init() postcore_initcall_sync 2016-06-23 14:57:40 -05:00
omap-iommu-debug.c iommu/omap: Align code with open parenthesis 2016-04-05 17:53:20 +02:00
omap-iommu.c iommu/omap: Use WARN_ON for page table alignment check 2016-04-05 17:53:20 +02:00
omap-iommu.h
omap-iopgtable.h
rockchip-iommu.c iommu/rockchip: Prepare to support generic DMA mapping 2016-06-27 14:50:08 +02:00
s390-iommu.c
tegra-gart.c
tegra-smmu.c