Commit 5d994374 authored by James Morse's avatar James Morse Committed by Marc Zyngier

KVM: arm64: Make indirect vectors preamble behaviour symmetric

The KVM indirect vectors support is a little complicated. Different CPUs
may use different exception vectors for KVM that are generated at boot.
Adding new instructions involves checking all the possible combinations
do the right thing.

To make changes here easier to review lets state what we expect of the
preamble:
  1. The first vector run, must always run the preamble.
  2. Patching the head or tail of the vector shouldn't remove
     preamble instructions.

Today, this is easy as we only have one instruction in the preamble.
Change the unpatched tail of the indirect vector so that it always
runs this, regardless of patching.
Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 3dbf100b
...@@ -275,7 +275,7 @@ ENDPROC(__kvm_hyp_vector) ...@@ -275,7 +275,7 @@ ENDPROC(__kvm_hyp_vector)
/* /*
* The default sequence is to directly branch to the KVM vectors, * The default sequence is to directly branch to the KVM vectors,
* using the computed offset. This applies for VHE as well as * using the computed offset. This applies for VHE as well as
* !ARM64_HARDEN_EL2_VECTORS. * !ARM64_HARDEN_EL2_VECTORS. The first vector must always run the preamble.
* *
* For ARM64_HARDEN_EL2_VECTORS configurations, this gets replaced * For ARM64_HARDEN_EL2_VECTORS configurations, this gets replaced
* with: * with:
...@@ -291,8 +291,8 @@ ENDPROC(__kvm_hyp_vector) ...@@ -291,8 +291,8 @@ ENDPROC(__kvm_hyp_vector)
* See kvm_patch_vector_branch for details. * See kvm_patch_vector_branch for details.
*/ */
alternative_cb kvm_patch_vector_branch alternative_cb kvm_patch_vector_branch
b __kvm_hyp_vector + (1b - 0b) stp x0, x1, [sp, #-16]!
nop b __kvm_hyp_vector + (1b - 0b + KVM_VECTOR_PREAMBLE)
nop nop
nop nop
nop nop
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment