Commit 0c7639cc authored by Marc Zyngier's avatar Marc Zyngier

KVM: arm64: pkvm: Pass vpcu instead of kvm to kvm_get_exit_handler_array()

Passing a VM pointer around is odd, and results in extra work on
VHE. Follow the rest of the design that uses the vcpu instead, and
let the nVHE code look into the struct kvm as required.
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Reviewed-by: default avatarFuad Tabba <tabba@google.com>
Tested-by: default avatarFuad Tabba <tabba@google.com>
Link: https://lore.kernel.org/r/20211013120346.2926621-11-maz@kernel.org
parent 746bdead
...@@ -397,7 +397,7 @@ static bool kvm_hyp_handle_dabt_low(struct kvm_vcpu *vcpu, u64 *exit_code) ...@@ -397,7 +397,7 @@ static bool kvm_hyp_handle_dabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
typedef bool (*exit_handler_fn)(struct kvm_vcpu *, u64 *); typedef bool (*exit_handler_fn)(struct kvm_vcpu *, u64 *);
static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm *kvm); static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu);
/* /*
* Allow the hypervisor to handle the exit with an exit handler if it has one. * Allow the hypervisor to handle the exit with an exit handler if it has one.
...@@ -407,7 +407,7 @@ static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm *kvm); ...@@ -407,7 +407,7 @@ static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm *kvm);
*/ */
static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code) static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
{ {
const exit_handler_fn *handlers = kvm_get_exit_handler_array(kern_hyp_va(vcpu->kvm)); const exit_handler_fn *handlers = kvm_get_exit_handler_array(vcpu);
exit_handler_fn fn; exit_handler_fn fn;
fn = handlers[kvm_vcpu_trap_get_class(vcpu)]; fn = handlers[kvm_vcpu_trap_get_class(vcpu)];
......
...@@ -211,9 +211,9 @@ static const exit_handler_fn pvm_exit_handlers[] = { ...@@ -211,9 +211,9 @@ static const exit_handler_fn pvm_exit_handlers[] = {
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth, [ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
}; };
static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm *kvm) static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu)
{ {
if (unlikely(kvm_vm_is_protected(kvm))) if (unlikely(kvm_vm_is_protected(kern_hyp_va(vcpu->kvm))))
return pvm_exit_handlers; return pvm_exit_handlers;
return hyp_exit_handlers; return hyp_exit_handlers;
......
...@@ -107,7 +107,7 @@ static const exit_handler_fn hyp_exit_handlers[] = { ...@@ -107,7 +107,7 @@ static const exit_handler_fn hyp_exit_handlers[] = {
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth, [ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
}; };
static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm *kvm) static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu)
{ {
return hyp_exit_handlers; return hyp_exit_handlers;
} }
......
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