arm64: Honor VHE being disabled from the command-line
authorMarc Zyngier <maz@kernel.org>
Mon, 8 Feb 2021 09:57:24 +0000 (09:57 +0000)
committerWill Deacon <will@kernel.org>
Tue, 9 Feb 2021 13:50:56 +0000 (13:50 +0000)
Finally we can check whether VHE is disabled on the command line,
and not enable it if that's the user's wish.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: David Brazdil <dbrazdil@google.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20210208095732.3267263-16-maz@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/hyp-stub.S

index 3017844..a36e2fc 100644 (file)
@@ -99,6 +99,9 @@ int main(void)
   DEFINE(CPU_BOOT_STACK,       offsetof(struct secondary_data, stack));
   DEFINE(CPU_BOOT_TASK,                offsetof(struct secondary_data, task));
   BLANK();
+  DEFINE(FTR_OVR_VAL_OFFSET,   offsetof(struct arm64_ftr_override, val));
+  DEFINE(FTR_OVR_MASK_OFFSET,  offsetof(struct arm64_ftr_override, mask));
+  BLANK();
 #ifdef CONFIG_KVM
   DEFINE(VCPU_CONTEXT,         offsetof(struct kvm_vcpu, arch.ctxt));
   DEFINE(VCPU_FAULT_DISR,      offsetof(struct kvm_vcpu, arch.fault.disr_el1));
index 6229315..3e08dcc 100644 (file)
@@ -87,6 +87,17 @@ SYM_CODE_START_LOCAL(mutate_to_vhe)
        ubfx    x1, x1, #ID_AA64MMFR1_VHE_SHIFT, #4
        cbz     x1, 1f
 
+       // Check whether VHE is disabled from the command line
+       adr_l   x1, id_aa64mmfr1_override
+       ldr     x2, [x1, FTR_OVR_VAL_OFFSET]
+       ldr     x1, [x1, FTR_OVR_MASK_OFFSET]
+       ubfx    x2, x2, #ID_AA64MMFR1_VHE_SHIFT, #4
+       ubfx    x1, x1, #ID_AA64MMFR1_VHE_SHIFT, #4
+       cmp     x1, xzr
+       and     x2, x2, x1
+       csinv   x2, x2, xzr, ne
+       cbz     x2, 1f
+
        // Engage the VHE magic!
        mov_q   x0, HCR_HOST_VHE_FLAGS
        msr     hcr_el2, x0