Skip to content

Commit

Permalink
KVM: arm64: Avoid repetitive stack access on host EL1 to EL2 exception
Browse files Browse the repository at this point in the history
Registers x0/x1 get repeateadly pushed and poped during a host
HVC call. Instead, leave the registers on the stack, trading
a store instruction on the fast path for an add on the slow path.

Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
  • Loading branch information
Marc Zyngier committed Nov 27, 2020
1 parent 29052f1 commit 83fa381
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions arch/arm64/kvm/hyp/nvhe/host.S
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
.text

SYM_FUNC_START(__host_exit)
stp x0, x1, [sp, #-16]!

get_host_ctxt x0, x1

/* Store the host regs x2 and x3 */
Expand Down Expand Up @@ -99,13 +97,15 @@ SYM_FUNC_END(__hyp_do_panic)
mrs x0, esr_el2
lsr x0, x0, #ESR_ELx_EC_SHIFT
cmp x0, #ESR_ELx_EC_HVC64
ldp x0, x1, [sp], #16
b.ne __host_exit

ldp x0, x1, [sp] // Don't fixup the stack yet

/* Check for a stub HVC call */
cmp x0, #HVC_STUB_HCALL_NR
b.hs __host_exit

add sp, sp, #16
/*
* Compute the idmap address of __kvm_handle_stub_hvc and
* jump there. Since we use kimage_voffset, do not use the
Expand Down

0 comments on commit 83fa381

Please sign in to comment.