]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
KVM: arm64: Move kvm_vcpu_trap_il_is32bit into kvm_skip_instr32()
authorMarc Zyngier <maz@kernel.org>
Tue, 13 Oct 2020 10:14:38 +0000 (11:14 +0100)
committerMarc Zyngier <maz@kernel.org>
Tue, 10 Nov 2020 08:34:24 +0000 (08:34 +0000)
There is no need to feed the result of kvm_vcpu_trap_il_is32bit()
to kvm_skip_instr(), as only AArch32 has a variable length ISA, and
this helper can equally be called from kvm_skip_instr32(), reducing
the complexity at all the call sites.

Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_emulate.h
arch/arm64/kvm/handle_exit.c
arch/arm64/kvm/hyp/aarch32.c
arch/arm64/kvm/mmio.c
arch/arm64/kvm/mmu.c
arch/arm64/kvm/sys_regs.c

index 5ef2669ccd6c3908bdc64d82cc7ac342de19b1b3..0864f425547db5cd2aa5145f9c4a816ed21941eb 100644 (file)
@@ -26,7 +26,7 @@ unsigned long vcpu_read_spsr32(const struct kvm_vcpu *vcpu);
 void vcpu_write_spsr32(struct kvm_vcpu *vcpu, unsigned long v);
 
 bool kvm_condition_valid32(const struct kvm_vcpu *vcpu);
-void kvm_skip_instr32(struct kvm_vcpu *vcpu, bool is_wide_instr);
+void kvm_skip_instr32(struct kvm_vcpu *vcpu);
 
 void kvm_inject_undefined(struct kvm_vcpu *vcpu);
 void kvm_inject_vabt(struct kvm_vcpu *vcpu);
@@ -472,10 +472,10 @@ static inline unsigned long vcpu_data_host_to_guest(struct kvm_vcpu *vcpu,
        return data;            /* Leave LE untouched */
 }
 
-static __always_inline void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr)
+static __always_inline void kvm_skip_instr(struct kvm_vcpu *vcpu)
 {
        if (vcpu_mode_is_32bit(vcpu)) {
-               kvm_skip_instr32(vcpu, is_wide_instr);
+               kvm_skip_instr32(vcpu);
        } else {
                *vcpu_pc(vcpu) += 4;
                *vcpu_cpsr(vcpu) &= ~PSR_BTYPE_MASK;
@@ -494,7 +494,7 @@ static __always_inline void __kvm_skip_instr(struct kvm_vcpu *vcpu)
        *vcpu_pc(vcpu) = read_sysreg_el2(SYS_ELR);
        vcpu_gp_regs(vcpu)->pstate = read_sysreg_el2(SYS_SPSR);
 
-       kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+       kvm_skip_instr(vcpu);
 
        write_sysreg_el2(vcpu_gp_regs(vcpu)->pstate, SYS_SPSR);
        write_sysreg_el2(*vcpu_pc(vcpu), SYS_ELR);
index 79a720657c47f0e12e425afc908cb2ac3ea9ab5b..30bf8e22df54c3db485ad23af4ac403f1755b439 100644 (file)
@@ -61,7 +61,7 @@ static int handle_smc(struct kvm_vcpu *vcpu)
         * otherwise return to the same address...
         */
        vcpu_set_reg(vcpu, 0, ~0UL);
-       kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+       kvm_skip_instr(vcpu);
        return 1;
 }
 
@@ -100,7 +100,7 @@ static int kvm_handle_wfx(struct kvm_vcpu *vcpu)
                kvm_clear_request(KVM_REQ_UNHALT, vcpu);
        }
 
-       kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+       kvm_skip_instr(vcpu);
 
        return 1;
 }
@@ -221,7 +221,7 @@ static int handle_trap_exceptions(struct kvm_vcpu *vcpu)
         * that fail their condition code check"
         */
        if (!kvm_condition_valid(vcpu)) {
-               kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+               kvm_skip_instr(vcpu);
                handled = 1;
        } else {
                exit_handle_fn exit_handler;
index ae56d8a4b3828bce8353b6e29ef37930222f4c0c..f98cbe2626a1cb545da7a71ffd31fb11f0c6e8ae 100644 (file)
@@ -123,13 +123,13 @@ static void kvm_adjust_itstate(struct kvm_vcpu *vcpu)
  * kvm_skip_instr - skip a trapped instruction and proceed to the next
  * @vcpu: The vcpu pointer
  */
-void kvm_skip_instr32(struct kvm_vcpu *vcpu, bool is_wide_instr)
+void kvm_skip_instr32(struct kvm_vcpu *vcpu)
 {
        u32 pc = *vcpu_pc(vcpu);
        bool is_thumb;
 
        is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_AA32_T_BIT);
-       if (is_thumb && !is_wide_instr)
+       if (is_thumb && !kvm_vcpu_trap_il_is32bit(vcpu))
                pc += 2;
        else
                pc += 4;
index 6a2826f1bf5e99532a08969be845022a2c8e2f76..7e8eb32ae7d2fc8b5f628327167fcceb64b6d9f6 100644 (file)
@@ -115,7 +115,7 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu)
         * The MMIO instruction is emulated and should not be re-executed
         * in the guest.
         */
-       kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+       kvm_skip_instr(vcpu);
 
        return 0;
 }
index 57972bdb213ab25849e1df59c9bf51735031e9e9..0bec07cf8d06b0fe127b29a0e21b4732b46434fc 100644 (file)
@@ -1014,7 +1014,7 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu)
                 * cautious, and skip the instruction.
                 */
                if (kvm_is_error_hva(hva) && kvm_vcpu_dabt_is_cm(vcpu)) {
-                       kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+                       kvm_skip_instr(vcpu);
                        ret = 1;
                        goto out_unlock;
                }
index fb12d3ef423ad04cfc7c5b734c52e8382780811d..1232a814ca7f112226729c6fbd49d631041ded38 100644 (file)
@@ -2199,7 +2199,7 @@ static void perform_access(struct kvm_vcpu *vcpu,
 
        /* Skip instruction if instructed so */
        if (likely(r->access(vcpu, params, r)))
-               kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+               kvm_skip_instr(vcpu);
 }
 
 /*