Commit 68e3baac authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

KVM: PPC: Book3S HV P9: Move SPR loading after expiry time check

This is wasted work if the time limit is exceeded.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210528090752.3542186-19-npiggin@gmail.com
parent a32ed1bb
...@@ -123,21 +123,16 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc ...@@ -123,21 +123,16 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
u64 tb, purr, spurr; u64 tb, purr, spurr;
u64 *exsave; u64 *exsave;
bool ri_set; bool ri_set;
unsigned long msr = mfmsr();
int trap; int trap;
unsigned long host_hfscr = mfspr(SPRN_HFSCR); unsigned long msr;
unsigned long host_ciabr = mfspr(SPRN_CIABR); unsigned long host_hfscr;
unsigned long host_dawr0 = mfspr(SPRN_DAWR0); unsigned long host_ciabr;
unsigned long host_dawrx0 = mfspr(SPRN_DAWRX0); unsigned long host_dawr0;
unsigned long host_psscr = mfspr(SPRN_PSSCR); unsigned long host_dawrx0;
unsigned long host_pidr = mfspr(SPRN_PID); unsigned long host_psscr;
unsigned long host_dawr1 = 0; unsigned long host_pidr;
unsigned long host_dawrx1 = 0; unsigned long host_dawr1;
unsigned long host_dawrx1;
if (cpu_has_feature(CPU_FTR_DAWR1)) {
host_dawr1 = mfspr(SPRN_DAWR1);
host_dawrx1 = mfspr(SPRN_DAWRX1);
}
hdec = time_limit - mftb(); hdec = time_limit - mftb();
if (hdec < 0) if (hdec < 0)
...@@ -154,6 +149,19 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc ...@@ -154,6 +149,19 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
vc->tb_offset_applied = vc->tb_offset; 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) if (vc->pcr)
mtspr(SPRN_PCR, vc->pcr | PCR_MASK); mtspr(SPRN_PCR, vc->pcr | PCR_MASK);
mtspr(SPRN_DPDES, vc->dpdes); mtspr(SPRN_DPDES, vc->dpdes);
......
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