Commit 6ba53317 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

KVM: PPC: Book3S HV: Save host FSCR in the P7/8 path



Similar to commit 25edcc50 ("KVM: PPC: Book3S HV: Save and restore
FSCR in the P9 path"), ensure the P7/8 path saves and restores the host
FSCR. The logic explained in that patch actually applies there to the
old path well: a context switch can be made before kvmppc_vcpu_run_hv
restores the host FSCR and returns.

Now both the p9 and the p7/8 paths now save and restore their FSCR, it
no longer needs to be restored at the end of kvmppc_vcpu_run_hv

Fixes: b005255e ("KVM: PPC: Book3S HV: Context-switch new POWER8 SPRs")
Cc: stable@vger.kernel.org # v3.14+
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Reviewed-by: default avatarFabiano Rosas <farosas@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210526125851.3436735-1-npiggin@gmail.com
parent d07f6ca9
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -4455,7 +4455,6 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
		mtspr(SPRN_EBBRR, ebb_regs[1]);
		mtspr(SPRN_EBBRR, ebb_regs[1]);
		mtspr(SPRN_BESCR, ebb_regs[2]);
		mtspr(SPRN_BESCR, ebb_regs[2]);
		mtspr(SPRN_TAR, user_tar);
		mtspr(SPRN_TAR, user_tar);
		mtspr(SPRN_FSCR, current->thread.fscr);
	}
	}
	mtspr(SPRN_VRSAVE, user_vrsave);
	mtspr(SPRN_VRSAVE, user_vrsave);


+7 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
#define STACK_SLOT_UAMOR	(SFS-88)
#define STACK_SLOT_UAMOR	(SFS-88)
#define STACK_SLOT_DAWR1	(SFS-96)
#define STACK_SLOT_DAWR1	(SFS-96)
#define STACK_SLOT_DAWRX1	(SFS-104)
#define STACK_SLOT_DAWRX1	(SFS-104)
#define STACK_SLOT_FSCR		(SFS-112)
/* the following is used by the P9 short path */
/* the following is used by the P9 short path */
#define STACK_SLOT_NVGPRS	(SFS-152)	/* 18 gprs */
#define STACK_SLOT_NVGPRS	(SFS-152)	/* 18 gprs */


@@ -686,6 +687,8 @@ BEGIN_FTR_SECTION
	std	r6, STACK_SLOT_DAWR0(r1)
	std	r6, STACK_SLOT_DAWR0(r1)
	std	r7, STACK_SLOT_DAWRX0(r1)
	std	r7, STACK_SLOT_DAWRX0(r1)
	std	r8, STACK_SLOT_IAMR(r1)
	std	r8, STACK_SLOT_IAMR(r1)
	mfspr	r5, SPRN_FSCR
	std	r5, STACK_SLOT_FSCR(r1)
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
BEGIN_FTR_SECTION
BEGIN_FTR_SECTION
	mfspr	r6, SPRN_DAWR1
	mfspr	r6, SPRN_DAWR1
@@ -1663,6 +1666,10 @@ FTR_SECTION_ELSE
	ld	r7, STACK_SLOT_HFSCR(r1)
	ld	r7, STACK_SLOT_HFSCR(r1)
	mtspr	SPRN_HFSCR, r7
	mtspr	SPRN_HFSCR, r7
ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
BEGIN_FTR_SECTION
	ld	r5, STACK_SLOT_FSCR(r1)
	mtspr	SPRN_FSCR, r5
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
	/*
	/*
	 * Restore various registers to 0, where non-zero values
	 * Restore various registers to 0, where non-zero values
	 * set by the guest could disrupt the host.
	 * set by the guest could disrupt the host.