KVM: PPC: Book3S HV P9: Improve exit timing accounting coverage
authorNicholas Piggin <npiggin@gmail.com>
Fri, 28 May 2021 09:07:37 +0000 (19:07 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 10 Jun 2021 12:12:13 +0000 (22:12 +1000)
The C conversion caused exit timing to become a bit cramped. Expand it
to cover more of the entry and exit code.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210528090752.3542186-18-npiggin@gmail.com
arch/powerpc/kvm/book3s_hv_p9_entry.c

index a6f89e3..8a56141 100644 (file)
@@ -143,6 +143,8 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
        if (hdec < 0)
                return BOOK3S_INTERRUPT_HV_DECREMENTER;
 
+       start_timing(vcpu, &vcpu->arch.rm_entry);
+
        if (vc->tb_offset) {
                u64 new_tb = mftb() + vc->tb_offset;
                mtspr(SPRN_TBU40, new_tb);
@@ -193,8 +195,6 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
         */
        mtspr(SPRN_HDEC, hdec);
 
-       start_timing(vcpu, &vcpu->arch.rm_entry);
-
        vcpu->arch.ceded = 0;
 
        WARN_ON_ONCE(vcpu->arch.shregs.msr & MSR_HV);
@@ -337,8 +337,6 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
 
        accumulate_time(vcpu, &vcpu->arch.rm_exit);
 
-       end_timing(vcpu);
-
        /* Advance host PURR/SPURR by the amount used by guest */
        purr = mfspr(SPRN_PURR);
        spurr = mfspr(SPRN_SPURR);
@@ -402,6 +400,8 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
 
        switch_mmu_to_host_radix(kvm, host_pidr);
 
+       end_timing(vcpu);
+
        return trap;
 }
 EXPORT_SYMBOL_GPL(kvmhv_vcpu_entry_p9);