Skip to content

Commit f3c1d37

Browse files
jgunthorpewilldeacon
authored andcommitted
iommu/arm-smmu-v3: Mark STE MEV safe when computing the update sequence
Nested CD tables set the MEV bit to try to reduce multi-fault spamming on the hypervisor. Since MEV is in STE word 1 this causes a breaking update sequence that is not required and impacts real workloads. For the purposes of STE updates the value of MEV doesn't matter, if it is set/cleared early or late it just results in a change to the fault reports that must be supported by the kernel anyhow. The spec says: Note: Software must expect, and be able to deal with, coalesced fault records even when MEV == 0. So mark STE MEV safe when computing the update sequence, to avoid creating a breaking update. Fixes: da0c565 ("iommu/arm-smmu-v3: Set MEV bit in nested STE for DoS mitigations") Cc: stable@vger.kernel.org Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com> Reviewed-by: Mostafa Saleh <smostafa@google.com> Reviewed-by: Pranjal Shrivastava <praan@google.com> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Will Deacon <will@kernel.org>
1 parent 2781f2a commit f3c1d37

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,16 @@ VISIBLE_IF_KUNIT
10971097
void arm_smmu_get_ste_update_safe(const __le64 *cur, const __le64 *target,
10981098
__le64 *safe_bits)
10991099
{
1100+
/*
1101+
* MEV does not meaningfully impact the operation of the HW, it only
1102+
* changes how many fault events are generated, thus we can relax it
1103+
* when computing the ordering. The spec notes the device can act like
1104+
* MEV=1 anyhow:
1105+
*
1106+
* Note: Software must expect, and be able to deal with, coalesced
1107+
* fault records even when MEV == 0.
1108+
*/
1109+
safe_bits[1] |= cpu_to_le64(STRTAB_STE_1_MEV);
11001110
}
11011111
EXPORT_SYMBOL_IF_KUNIT(arm_smmu_get_ste_update_safe);
11021112

0 commit comments

Comments
 (0)