android_kernel_oneplus_msm8998/drivers/iommu
Sohil Mehta 0216bf654a iommu/vt-d: Handle domain agaw being less than iommu agaw
commit 3569dd07aaad71920c5ea4da2d5cc9a167c1ffd4 upstream.

The Intel IOMMU driver opportunistically skips a few top level page
tables from the domain paging directory while programming the IOMMU
context entry. However there is an implicit assumption in the code that
domain's adjusted guest address width (agaw) would always be greater
than IOMMU's agaw.

The IOMMU capabilities in an upcoming platform cause the domain's agaw
to be lower than IOMMU's agaw. The issue is seen when the IOMMU supports
both 4-level and 5-level paging. The domain builds a 4-level page table
based on agaw of 2. However the IOMMU's agaw is set as 3 (5-level). In
this case the code incorrectly tries to skip page page table levels.
This causes the IOMMU driver to avoid programming the context entry. The
fix handles this case and programs the context entry accordingly.

Fixes: de24e55395 ("iommu/vt-d: Simplify domain_context_mapping_one")
Cc: <stable@vger.kernel.org>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reported-by: Ramos Falcon, Ernesto R <ernesto.r.ramos.falcon@intel.com>
Tested-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Signed-off-by: Sohil Mehta <sohil.mehta@intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-13 10:05:33 +01:00
..
amd_iommu.c iommu/amd: Finish TLB flush in amd_iommu_unmap() 2017-10-18 09:20:42 +02:00
amd_iommu_init.c iommu/amd: Fix unity mapping initialization race 2016-07-27 09:47:32 -07:00
amd_iommu_proto.h IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_types.h IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
amd_iommu_v2.c iommu/amd: Fix incorrect error handling in amd_iommu_bind_pasid() 2017-07-05 14:37:22 +02:00
arm-smmu-v3.c iommu/arm-smmu-v3: sync the OVACKFLG to PRIQ consumer register 2018-09-26 08:35:04 +02:00
arm-smmu.c Merge branches 'x86/vt-d', 'arm/omap', 'arm/smmu', 's390', 'core' and 'x86/amd' into next 2015-11-02 20:03:34 +09:00
dma-iommu.c iommu/dma: Don't put uninitialised IOVA domains 2016-09-07 08:32:40 +02:00
dmar.c iommu/vt-d: Fix dev iotlb pfsid use 2018-09-09 20:04:35 +02:00
exynos-iommu.c iommu/exynos: Suppress unbinding to prevent system failure 2016-08-20 18:09:21 +02:00
fsl_pamu.c powerpc/fsl: Move fsl_guts.h out of arch/powerpc 2015-10-21 18:05:50 -05:00
fsl_pamu.h
fsl_pamu_domain.c iommu/fsl: Convert to device_group call-back 2015-10-22 00:00:49 +02:00
fsl_pamu_domain.h
intel-iommu.c iommu/vt-d: Handle domain agaw being less than iommu agaw 2019-01-13 10:05:33 +01:00
intel-svm.c iommu/vt-d: Fix NULL pointer dereference in prq_event_thread() 2018-12-13 09:21:34 +01:00
intel_irq_remapping.c x86/cpufeature: Remove unused and seldomly used cpu_has_xx macros 2018-06-16 09:54:24 +02:00
io-pgtable-arm.c iommu/io-pgtable-arm: Check for leaf entry before dereferencing it 2017-10-08 10:14:19 +02:00
io-pgtable.c iommu/io-pgtable-arm: Move init-fn declarations to io-pgtable.h 2015-08-13 19:51:04 +02:00
io-pgtable.h iommu/io-pgtable-arm: Move init-fn declarations to io-pgtable.h 2015-08-13 19:51:04 +02:00
iommu-sysfs.c
iommu-traces.c
iommu.c iommu: Handle default domain attach failure 2017-07-05 14:37:22 +02:00
iova.c iommu/iova: Fix underflow bug in __alloc_and_insert_iova_range 2018-03-22 09:23:24 +01:00
ipmmu-vmsa.c iommu/ipmmu-vmsa: Fix crash on early domain free 2018-12-13 09:21:34 +01:00
irq_remapping.c iommu/vt-d: Add a command line parameter for VT-d posted-interrupts 2015-10-01 15:06:54 +02:00
irq_remapping.h iommu, x86: Setup Posted-Interrupts capability for Intel iommu 2015-06-12 11:33:52 +02:00
Kconfig IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
Makefile IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
msm_iommu.c iommu/msm: Use BUG_ON instead of if () BUG() 2015-08-13 19:50:51 +02:00
msm_iommu.h
msm_iommu_dev.c
msm_iommu_hw-8xxx.h
of_iommu.c of: iommu: Silence misleading warning 2015-08-03 16:07:49 +02:00
omap-iommu-debug.c fs/seq_file: convert int seq_vprint/seq_printf/etc... returns to void 2015-09-11 15:21:34 -07:00
omap-iommu.c iommu/omap: Register driver before setting IOMMU ops 2018-03-24 10:58:42 +01:00
omap-iommu.h iommu/omap: Add support for configuring dsp iommus on DRA7xx 2015-10-14 14:35:47 +02:00
omap-iopgtable.h iommu/omap: Use BIT(x) macros in omap-iopgtable.h 2015-08-03 16:04:42 +02:00
rockchip-iommu.c Merge branches 'arm/rockchip', 'arm/exynos', 'arm/smmu', 'x86/vt-d', 'x86/amd', 'default-domains' and 'core' into next 2015-06-19 17:17:47 +02:00
s390-iommu.c s390/pci_dma: handle dma table failures 2015-11-09 09:10:49 +01:00
shmobile-iommu.c
shmobile-ipmmu.c
shmobile-ipmmu.h
tegra-gart.c Merge branches 'iommu/fixes', 'x86/vt-d', 'x86/amd', 'arm/smmu', 'arm/tegra' and 'core' into next 2015-04-02 13:33:19 +02:00
tegra-smmu.c iommu/tegra-smmu: Parameterize number of TLB lines 2015-08-13 17:05:28 +02:00