Commit 6a0259ed authored by Andrew Scull's avatar Andrew Scull Committed by Marc Zyngier
Browse files

KVM: arm64: Remove hyp_panic arguments



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: default avatarAndrew Scull <ascull@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200915104643.2543892-3-ascull@google.com
parent 501a67a2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −6
Original line number Diff line number Diff line
@@ -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
+1 −3
Original line number Diff line number Diff line
@@ -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__ */
+6 −2
Original line number Diff line number Diff line
@@ -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);
+6 −4
Original line number Diff line number Diff line
@@ -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();
}