Re: [PATCH] KVM: arm64: Add an ISB after mapping a hyp fixmap slot
From: Oliver Upton
Date: Thu Oct 29 2026 - 05:23:45 EST
On Thu, Oct 29, 2026 at 08:54:14AM +0000, Fuad Tabba wrote:
> Hi Xuheng,
>
> On Wed, 28 Oct 2026 23:02:10 +0000, Xuheng Li <xuheng@xxxxxxxxxxxxxxx> wrote:
> [...]
> > A litmus test of the same shape (map the slot, DSB ISHST, load through
> > it) faulted on a Cortex-A72 in 2 out of 100M runs. Arm's herd7 model
> > with -variant vmsa also allows the fault, and forbids it once the ISB
> > is added.
>
> nit: it would help to have the litmus test itself in the commit message,
> or as a commit note, so the herd7 claim can be checked. Here's the one I
> ran (herd7 7.58, -variant vmsa): "Sometimes" as below, "Never" with an
> ISB after the DSB, and "Never" without the ISB under -variant vmsa,ETS2.
Maybe I've been conditioned at this point but doing DSB; ISB to consume a
translation after setting it up seems pretty straightforward. Especially
since we don't care about ETS in the kernel at this point.
IOW, I'm not sure what additional detail the litmus test buys us.
Anyway:
Reviewed-by: Oliver Upton <oupton@xxxxxxxxxx>
Thanks,
Oliver
> AArch64 fixmap-noisb
> {
> [PTE(x)]=(oa:PA(x), valid:0);
> 0:X1=PTE(x); 0:X2=(oa:PA(x)); 0:X3=x;
> }
> P0 ;
> STR X2,[X1] ;
> DSB ISHST ;
> LDR W4,[X3] ;
> exists (fault(P0,x))
>
> FWIW, the result matches the ARM ARM (B2.3: without FEAT_ETS2, a DSB ST
> doesn't order an earlier store before a later translation table walk),
> and emit_pte_barriers() in arch/arm64/include/asm/pgtable.h has the same
> dsb(ishst) plus isb() after making a kernel pte valid, for the same
> reason.
>
> [...]
>
> Reviewed-by: Fuad Tabba <fuad.tabba@xxxxxxxxx>
>
> Tested in protected mode on QEMU, booting a protected and a
> non-protected guest, and on an Apple M4 (nested virtualization),
> booting a protected guest. No regressions.
>
> Tested-by: Fuad Tabba <fuad.tabba@xxxxxxxxx>
>
> Cheers,
> /fuad