This is wasted work if the time limit is exceeded.

Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
 arch/powerpc/kvm/book3s_hv_interrupt.c | 36 ++++++++++++++++----------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_hv_interrupt.c 
b/arch/powerpc/kvm/book3s_hv_interrupt.c
index 4058a325a7f0..f57379e73b5c 100644
--- a/arch/powerpc/kvm/book3s_hv_interrupt.c
+++ b/arch/powerpc/kvm/book3s_hv_interrupt.c
@@ -138,21 +138,16 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 
time_limit, unsigned long lpc
        u64 tb, purr, spurr;
        u64 *exsave;
        bool ri_set;
-       unsigned long msr = mfmsr();
        int trap;
-       unsigned long host_hfscr = mfspr(SPRN_HFSCR);
-       unsigned long host_ciabr = mfspr(SPRN_CIABR);
-       unsigned long host_dawr0 = mfspr(SPRN_DAWR0);
-       unsigned long host_dawrx0 = mfspr(SPRN_DAWRX0);
-       unsigned long host_psscr = mfspr(SPRN_PSSCR);
-       unsigned long host_pidr = mfspr(SPRN_PID);
-       unsigned long host_dawr1 = 0;
-       unsigned long host_dawrx1 = 0;
-
-       if (cpu_has_feature(CPU_FTR_DAWR1)) {
-               host_dawr1 = mfspr(SPRN_DAWR1);
-               host_dawrx1 = mfspr(SPRN_DAWRX1);
-       }
+       unsigned long msr;
+       unsigned long host_hfscr;
+       unsigned long host_ciabr;
+       unsigned long host_dawr0;
+       unsigned long host_dawrx0;
+       unsigned long host_psscr;
+       unsigned long host_pidr;
+       unsigned long host_dawr1;
+       unsigned long host_dawrx1;
 
        tb = mftb();
        hdec = time_limit - tb;
@@ -170,6 +165,19 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 
time_limit, unsigned long lpc
                vc->tb_offset_applied = vc->tb_offset;
        }
 
+       msr = mfmsr();
+
+       host_hfscr = mfspr(SPRN_HFSCR);
+       host_ciabr = mfspr(SPRN_CIABR);
+       host_dawr0 = mfspr(SPRN_DAWR0);
+       host_dawrx0 = mfspr(SPRN_DAWRX0);
+       host_psscr = mfspr(SPRN_PSSCR);
+       host_pidr = mfspr(SPRN_PID);
+       if (cpu_has_feature(CPU_FTR_DAWR1)) {
+               host_dawr1 = mfspr(SPRN_DAWR1);
+               host_dawrx1 = mfspr(SPRN_DAWRX1);
+       }
+
        if (vc->pcr)
                mtspr(SPRN_PCR, vc->pcr | PCR_MASK);
        mtspr(SPRN_DPDES, vc->dpdes);
-- 
2.23.0

Reply via email to