• Zenghui Yu's avatar
    KVM: arm64: selftest: Perform ISB before reading PAR_EL1 · 06899aa5
    Zenghui Yu authored
    It looks like a mistake to issue ISB *after* reading PAR_EL1, we should
    instead perform it between the AT instruction and the reads of PAR_EL1.
    
    As according to DDI0487J.a IJTYVP,
    
    "When an address translation instruction is executed, explicit
     synchronization is required to guarantee the result is visible to
     subsequent direct reads of PAR_EL1."
    
    Otherwise all guest_at testcases fail on my box with
    
    ==== Test Assertion Failure ====
      aarch64/page_fault_test.c:142: par & 1 == 0
      pid=1355864 tid=1355864 errno=4 - Interrupted system call
         1	0x0000000000402853: vcpu_run_loop at page_fault_test.c:681
         2	0x0000000000402cdb: run_test at page_fault_test.c:730
         3	0x0000000000403897: for_each_guest_mode at guest_modes.c:100
         4	0x00000000004019f3: for_each_test_and_guest_mode at page_fault_test.c:1105
         5	 (inlined by) main at page_fault_test.c:1131
         6	0x0000ffffb153c03b: ?? ??:0
         7	0x0000ffffb153c113: ?? ??:0
         8	0x0000000000401aaf: _start at ??:?
      0x1 != 0x0 (par & 1 != 0)
    Signed-off-by: default avatarZenghui Yu <yuzenghui@huawei.com>
    Acked-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20231007124043.626-2-yuzenghui@huawei.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    06899aa5
page_fault_test.c 33.8 KB