iommu/amd: Don't clear DTE flags when modifying it
Subsystems (2)
Joerg Roedel
maintainerPATCH 1/1 iommu/amd: Don't clear DTE flags when modifying it
From: Joerg Roedel <[email protected]>
During device assignment/deassignment the flags in the DTE get lost, which might cause spurious faults, for example when the device tries to access the system management range. Fix this by not clearing the flags with the rest of the DTE.
Signed-off-by Joerg Roedel <[email protected]>
--- drivers/iommu/amd_iommu.c | 4 ++-- drivers/iommu/amd_iommu_types.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-)
drivers/iommu/amd_iommu.c +2 -2
@@ -1974,8 +1974,8 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)static void clear_dte_entry (u16 devid) {/* remove entry from the device table seen by the hardware */ - amd_iommu_dev_table[devid].data[0 ] =IOMMU_PTE_P |IOMMU_PTE_TV ; - amd_iommu_dev_table[devid].data[1 ] =0 ; + amd_iommu_dev_table[devid].data[0 ] =IOMMU_PTE_P |IOMMU_PTE_TV ; + amd_iommu_dev_table[devid].data[1 ] &=DTE_FLAG_MASK ;amd_iommu_apply_erratum_63 (devid); }
drivers/iommu/amd_iommu_types.h +1 -0
@@ -295,6 +295,7 @@#define IOMMU_PTE_IR (1ULL << 61)#define IOMMU_PTE_IW (1ULL << 62) +#define DTE_FLAG_MASK (0x3ffULL << 32)#define DTE_FLAG_IOTLB (0x01UL << 32)#define DTE_FLAG_GV (0x01ULL << 55)#define DTE_GLX_SHIFT (56)
Signature · 1 line
1.9.1