KVM: arm64: Remove hyp_panic arguments
authorAndrew Scull <ascull@google.com>
Tue, 15 Sep 2020 10:46:26 +0000 (11:46 +0100)
committerMarc Zyngier <maz@kernel.org>
Tue, 15 Sep 2020 17:39:01 +0000 (18:39 +0100)
hyp_panic is able to find all the context it needs from within itself so
remove the argument. The __hyp_panic wrapper becomes redundant so is
also removed.

Signed-off-by: Andrew Scull <ascull@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200915104643.2543892-3-ascull@google.com
arch/arm64/include/asm/kvm_hyp.h
arch/arm64/kvm/hyp/hyp-entry.S
arch/arm64/kvm/hyp/include/hyp/switch.h
arch/arm64/kvm/hyp/nvhe/switch.c
arch/arm64/kvm/hyp/vhe/switch.c

index 46689e7..3de99b3 100644 (file)
@@ -89,7 +89,7 @@ void deactivate_traps_vhe_put(void);
 
 u64 __guest_enter(struct kvm_vcpu *vcpu, struct kvm_cpu_context *host_ctxt);
 
-void __noreturn hyp_panic(struct kvm_cpu_context *host_ctxt);
+void __noreturn hyp_panic(void);
 #ifdef __KVM_NVHE_HYPERVISOR__
 void __noreturn __hyp_do_panic(unsigned long, ...);
 #endif
index 46b4dab..9cb3fbc 100644 (file)
@@ -210,12 +210,7 @@ SYM_FUNC_START(__hyp_do_panic)
 SYM_FUNC_END(__hyp_do_panic)
 #endif
 
-SYM_CODE_START(__hyp_panic)
-       get_host_ctxt x0, x1
-       b       hyp_panic
-SYM_CODE_END(__hyp_panic)
-
-.macro invalid_vector  label, target = __hyp_panic
+.macro invalid_vector  label, target = hyp_panic
        .align  2
 SYM_CODE_START(\label)
        b \target
index 0864f88..96ea3fd 100644 (file)
@@ -510,13 +510,11 @@ static inline void __set_host_arch_workaround_state(struct kvm_vcpu *vcpu)
 static inline void __kvm_unexpected_el2_exception(void)
 {
        unsigned long addr, fixup;
-       struct kvm_cpu_context *host_ctxt;
        struct exception_table_entry *entry, *end;
        unsigned long elr_el2 = read_sysreg(elr_el2);
 
        entry = hyp_symbol_addr(__start___kvm_ex_table);
        end = hyp_symbol_addr(__stop___kvm_ex_table);
-       host_ctxt = &__hyp_this_cpu_ptr(kvm_host_data)->host_ctxt;
 
        while (entry < end) {
                addr = (unsigned long)&entry->insn + entry->insn;
@@ -531,7 +529,7 @@ static inline void __kvm_unexpected_el2_exception(void)
                return;
        }
 
-       hyp_panic(host_ctxt);
+       hyp_panic();
 }
 
 #endif /* __ARM64_KVM_HYP_SWITCH_H__ */
index 3c9c065..26d6fd4 100644 (file)
@@ -242,14 +242,18 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
        return exit_code;
 }
 
-void __noreturn hyp_panic(struct kvm_cpu_context *host_ctxt)
+void __noreturn hyp_panic(void)
 {
        u64 spsr = read_sysreg_el2(SYS_SPSR);
        u64 elr = read_sysreg_el2(SYS_ELR);
        u64 par = read_sysreg(par_el1);
-       struct kvm_vcpu *vcpu = host_ctxt->__hyp_running_vcpu;
+       struct kvm_cpu_context *host_ctxt;
+       struct kvm_vcpu *vcpu;
        unsigned long str_va;
 
+       host_ctxt = &__hyp_this_cpu_ptr(kvm_host_data)->host_ctxt;
+       vcpu = host_ctxt->__hyp_running_vcpu;
+
        if (read_sysreg(vttbr_el2)) {
                __timer_disable_traps(vcpu);
                __deactivate_traps(vcpu);
index 6636522..c1fd475 100644 (file)
@@ -192,10 +192,12 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
        return ret;
 }
 
-static void __hyp_call_panic(u64 spsr, u64 elr, u64 par,
-                            struct kvm_cpu_context *host_ctxt)
+static void __hyp_call_panic(u64 spsr, u64 elr, u64 par)
 {
+       struct kvm_cpu_context *host_ctxt;
        struct kvm_vcpu *vcpu;
+
+       host_ctxt = &__hyp_this_cpu_ptr(kvm_host_data)->host_ctxt;
        vcpu = host_ctxt->__hyp_running_vcpu;
 
        __deactivate_traps(vcpu);
@@ -208,13 +210,13 @@ static void __hyp_call_panic(u64 spsr, u64 elr, u64 par,
 }
 NOKPROBE_SYMBOL(__hyp_call_panic);
 
-void __noreturn hyp_panic(struct kvm_cpu_context *host_ctxt)
+void __noreturn hyp_panic(void)
 {
        u64 spsr = read_sysreg_el2(SYS_SPSR);
        u64 elr = read_sysreg_el2(SYS_ELR);
        u64 par = read_sysreg(par_el1);
 
-       __hyp_call_panic(spsr, elr, par, host_ctxt);
+       __hyp_call_panic(spsr, elr, par);
        unreachable();
 }