@@ -34,7 +34,7 @@
* Size of the HYP vectors preamble. kvm_patch_vector_branch() generates code
* that jumps over this.
*/
-#define KVM_VECTOR_PREAMBLE (1 * AARCH64_INSN_SIZE)
+#define KVM_VECTOR_PREAMBLE (2 * AARCH64_INSN_SIZE)
#ifndef __ASSEMBLY__
@@ -127,8 +127,8 @@ ENTRY(__guest_exit)
alternative_if ARM64_HAS_RAS_EXTN
// If we have the RAS extensions we can consume a pending error
- // without an unmask-SError and isb.
- esb
+ // without an unmask-SError and isb. The ESB-instruction consumed any
+ // pending guest error when we took the exception from the guest.
mrs_s x2, SYS_DISR_EL1
str x2, [x1, #(VCPU_FAULT_DISR - VCPU_CONTEXT)]
cbz x2, 1f
@@ -146,7 +146,6 @@ alternative_else
mov x5, x0
dsb sy // Synchronize against in-flight ld/st
- nop
msr daifclr, #4 // Unmask aborts
alternative_endif
@@ -226,6 +226,7 @@ ENDPROC(\label)
.macro valid_vect target
.align 7
661:
+ esb
stp x0, x1, [sp, #-16]!
662:
b \target
@@ -237,6 +238,7 @@ check_preamble_length 661b, 662b
.align 7
661:
b \target
+ nop
662:
ldp x0, x1, [sp], #16
b \target
@@ -269,7 +271,8 @@ ENDPROC(__kvm_hyp_vector)
#ifdef CONFIG_KVM_INDIRECT_VECTORS
.macro hyp_ventry
.align 7
-1: .rept 27
+1: esb
+ .rept 26
nop
.endr
/*
@@ -317,6 +320,7 @@ ENTRY(__bp_harden_hyp_vecs_end)
.popsection
ENTRY(__smccc_workaround_1_smc_start)
+ esb
sub sp, sp, #(8 * 4)
stp x2, x3, [sp, #(8 * 0)]
stp x0, x1, [sp, #(8 * 2)]