KVM: arm64: Rewrite sysreg alternatives to static keys
authorChristoffer Dall <christoffer.dall@linaro.org>
Tue, 10 Oct 2017 20:01:06 +0000 (22:01 +0200)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 19 Mar 2018 10:53:14 +0000 (10:53 +0000)
As we are about to move calls around in the sysreg save/restore logic,
let's first rewrite the alternative function callers, because it is
going to make the next patches much easier to read.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm64/kvm/hyp/sysreg-sr.c

index d5a5145b4e7cbde3e348aa6cb3d302b82d5291c4..51b5572261708fe99f27bc2072619e9b6c273659 100644 (file)
@@ -22,9 +22,6 @@
 #include <asm/kvm_emulate.h>
 #include <asm/kvm_hyp.h>
 
-/* Yes, this does nothing, on purpose */
-static void __hyp_text __sysreg_do_nothing(struct kvm_cpu_context *ctxt) { }
-
 /*
  * Non-VHE: Both host and guest must save everything.
  *
@@ -81,13 +78,10 @@ static void __hyp_text __sysreg_save_el1_state(struct kvm_cpu_context *ctxt)
                ctxt->sys_regs[DISR_EL1] = read_sysreg_s(SYS_VDISR_EL2);
 }
 
-static hyp_alternate_select(__sysreg_call_save_host_state,
-                           __sysreg_save_el1_state, __sysreg_do_nothing,
-                           ARM64_HAS_VIRT_HOST_EXTN);
-
 void __hyp_text __sysreg_save_host_state(struct kvm_cpu_context *ctxt)
 {
-       __sysreg_call_save_host_state()(ctxt);
+       if (!has_vhe())
+               __sysreg_save_el1_state(ctxt);
        __sysreg_save_common_state(ctxt);
        __sysreg_save_user_state(ctxt);
 }
@@ -148,13 +142,10 @@ static void __hyp_text __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt)
                write_sysreg_s(ctxt->sys_regs[DISR_EL1], SYS_VDISR_EL2);
 }
 
-static hyp_alternate_select(__sysreg_call_restore_host_state,
-                           __sysreg_restore_el1_state, __sysreg_do_nothing,
-                           ARM64_HAS_VIRT_HOST_EXTN);
-
 void __hyp_text __sysreg_restore_host_state(struct kvm_cpu_context *ctxt)
 {
-       __sysreg_call_restore_host_state()(ctxt);
+       if (!has_vhe())
+               __sysreg_restore_el1_state(ctxt);
        __sysreg_restore_common_state(ctxt);
        __sysreg_restore_user_state(ctxt);
 }