Commit de5bcdb4 authored by Will Deacon's avatar Will Deacon Committed by Marc Zyngier

KVM: arm64: Tidy up kvm_map_vector()

The bulk of the work in kvm_map_vector() is conditional on the
ARM64_HARDEN_EL2_VECTORS capability, so return early if that is not set
and make the code a bit easier to read.
Signed-off-by: default avatarWill Deacon <will@kernel.org>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Quentin Perret <qperret@google.com>
Link: https://lore.kernel.org/r/20201113113847.21619-3-will@kernel.org
parent 8934c845
...@@ -1297,6 +1297,8 @@ static unsigned long nvhe_percpu_order(void) ...@@ -1297,6 +1297,8 @@ static unsigned long nvhe_percpu_order(void)
static int kvm_map_vectors(void) static int kvm_map_vectors(void)
{ {
int slot;
/* /*
* SV2 = ARM64_SPECTRE_V2 * SV2 = ARM64_SPECTRE_V2
* HEL2 = ARM64_HARDEN_EL2_VECTORS * HEL2 = ARM64_HARDEN_EL2_VECTORS
...@@ -1306,22 +1308,20 @@ static int kvm_map_vectors(void) ...@@ -1306,22 +1308,20 @@ static int kvm_map_vectors(void)
* !SV2 + HEL2 -> allocate one vector slot and use exec mapping * !SV2 + HEL2 -> allocate one vector slot and use exec mapping
* SV2 + HEL2 -> use hardened vectors and use exec mapping * SV2 + HEL2 -> use hardened vectors and use exec mapping
*/ */
if (cpus_have_const_cap(ARM64_HARDEN_EL2_VECTORS)) { if (!cpus_have_const_cap(ARM64_HARDEN_EL2_VECTORS))
phys_addr_t vect_pa = __pa_symbol(__bp_harden_hyp_vecs); return 0;
unsigned long size = __BP_HARDEN_HYP_VECS_SZ;
/* /*
* Always allocate a spare vector slot, as we don't * Always allocate a spare vector slot, as we don't know yet which CPUs
* know yet which CPUs have a BP hardening slot that * have a BP hardening slot that we can reuse.
* we can reuse. */
*/ slot = atomic_inc_return(&arm64_el2_vector_last_slot);
__kvm_harden_el2_vector_slot = atomic_inc_return(&arm64_el2_vector_last_slot); BUG_ON(slot >= BP_HARDEN_EL2_SLOTS);
BUG_ON(__kvm_harden_el2_vector_slot >= BP_HARDEN_EL2_SLOTS); __kvm_harden_el2_vector_slot = slot;
return create_hyp_exec_mappings(vect_pa, size,
&__kvm_bp_vect_base);
}
return 0; return create_hyp_exec_mappings(__pa_symbol(__bp_harden_hyp_vecs),
__BP_HARDEN_HYP_VECS_SZ,
&__kvm_bp_vect_base);
} }
static void cpu_init_hyp_mode(void) static void cpu_init_hyp_mode(void)
......
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