Commit 87b26801 authored by Andrew Scull's avatar Andrew Scull Committed by Marc Zyngier

KVM: arm64: Simplify __kvm_hyp_init HVC detection

The arguments for __do_hyp_init are now passed with a pointer to a
struct which means there are scratch registers available for use. Thanks
to this, we no longer need to use clever, but hard to read, tricks that
avoid the need for scratch registers when checking for the
__kvm_hyp_init HVC.
Tested-by: default avatarDavid Brazdil <dbrazdil@google.com>
Signed-off-by: default avatarAndrew Scull <ascull@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210125145415.122439-2-ascull@google.com
parent 19c329f6
...@@ -55,17 +55,10 @@ __do_hyp_init: ...@@ -55,17 +55,10 @@ __do_hyp_init:
cmp x0, #HVC_STUB_HCALL_NR cmp x0, #HVC_STUB_HCALL_NR
b.lo __kvm_handle_stub_hvc b.lo __kvm_handle_stub_hvc
// We only actively check bits [24:31], and everything mov x3, #KVM_HOST_SMCCC_FUNC(__kvm_hyp_init)
// else has to be zero, which we check at build time. cmp x0, x3
#if (KVM_HOST_SMCCC_FUNC(__kvm_hyp_init) & 0xFFFFFFFF00FFFFFF) b.eq 1f
#error Unexpected __KVM_HOST_SMCCC_FUNC___kvm_hyp_init value
#endif
ror x0, x0, #24
eor x0, x0, #((KVM_HOST_SMCCC_FUNC(__kvm_hyp_init) >> 24) & 0xF)
ror x0, x0, #4
eor x0, x0, #((KVM_HOST_SMCCC_FUNC(__kvm_hyp_init) >> 28) & 0xF)
cbz x0, 1f
mov x0, #SMCCC_RET_NOT_SUPPORTED mov x0, #SMCCC_RET_NOT_SUPPORTED
eret eret
......
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