diff mbox series

KVM: PPC: Book3S HV: Restore SPRG3 in kvmhv_p9_guest_entry()

Message ID 20190530021718.22584-1-sjitindarsingh@gmail.com (mailing list archive)
State New, archived
Headers show
Series KVM: PPC: Book3S HV: Restore SPRG3 in kvmhv_p9_guest_entry() | expand

Commit Message

Suraj Jitindar Singh May 30, 2019, 2:17 a.m. UTC
The sprgs are a set of 4 general purpose sprs provided for software use.
SPRG3 is special in that it can also be read from userspace. Thus it is
used on linux to store the cpu and numa id of the process to speed up
syscall access to this information.

This register is overwritten with the guest value on kvm guest entry,
and so needs to be restored on exit again. Thus restore the value on
the guest exit path in kvmhv_p9_guest_entry().

Fixes: 95a6432ce9038 ("KVM: PPC: Book3S HV: Streamlined guest entry/exit path on P9 for radix guests")

Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
---
 arch/powerpc/kvm/book3s_hv.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Paul Mackerras May 31, 2019, 6:37 a.m. UTC | #1
On Thu, May 30, 2019 at 12:17:18PM +1000, Suraj Jitindar Singh wrote:
> The sprgs are a set of 4 general purpose sprs provided for software use.
> SPRG3 is special in that it can also be read from userspace. Thus it is
> used on linux to store the cpu and numa id of the process to speed up
> syscall access to this information.
> 
> This register is overwritten with the guest value on kvm guest entry,
> and so needs to be restored on exit again. Thus restore the value on
> the guest exit path in kvmhv_p9_guest_entry().
> 
> Fixes: 95a6432ce9038 ("KVM: PPC: Book3S HV: Streamlined guest entry/exit path on P9 for radix guests")
> 
> Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>

Thanks, patch applied to my kvm-ppc-fixes branch.

Paul.
diff mbox series

Patch

diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index ecbf66b3d2a4..4fdd7a7fe6a7 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -3677,6 +3677,7 @@  out:		kfree(hvregs);
 	vc->in_guest = 0;
 
 	mtspr(SPRN_DEC, local_paca->kvm_hstate.dec_expires - mftb());
+	mtspr(SPRN_SPRG_VDSO_WRITE, local_paca->sprg_vdso);
 
 	kvmhv_load_host_pmu();