]> www.infradead.org Git - users/hch/misc.git/commit
KVM: arm64: selftests: Explicitly set the page attrs to Inner-Shareable
authorRaghavendra Rao Ananta <rananta@google.com>
Sat, 5 Apr 2025 00:10:42 +0000 (00:10 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Sun, 6 Apr 2025 18:13:50 +0000 (11:13 -0700)
commitc8631ea59b6523035ffb607634eef7bacc8947fe
treea8f445f64f5393193babb10eed802cd3ff0a4d69
parentd8d78398e550039295e0237eafb703e2d21f7d57
KVM: arm64: selftests: Explicitly set the page attrs to Inner-Shareable

Atomic instructions such as 'ldset' in the guest have been observed to
cause an EL1 data abort with FSC 0x35 (IMPLEMENTATION DEFINED fault
(Unsupported Exclusive or Atomic access)) on Neoverse-N3.

Per DDI0487L.a B2.2.6, atomic instructions are only architecturally
guaranteed for Inner/Outer Shareable Normal Write-Back memory. For
anything else the behavior is IMPLEMENTATION DEFINED and can lose
atomicity, or, in this case, generate an abort.

It would appear that selftests sets up the stage-1 mappings as Non
Shareable, leading to the observed abort. Explicitly set the
Shareability field to Inner Shareable for non-LPA2 page tables. Note
that for the LPA2 page table format, translations for cacheable memory
inherit the shareability attribute of the PTW, i.e. TCR_ELx.SH{0,1}.

Suggested-by: Oliver Upton <oupton@google.com>
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
Link: https://lore.kernel.org/r/20250405001042.1470552-3-rananta@google.com
[oliver: Rephrase changelog]
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
tools/testing/selftests/kvm/include/arm64/processor.h
tools/testing/selftests/kvm/lib/arm64/processor.c