Skip to content

Commit f14040b

Browse files
mikeympe
authored andcommitted
KVM: PPC: Book3S HV: Fix guest r11 corruption with POWER9 TM workarounds
When we come into the softpatch handler (0x1500), we use r11 to store the HSRR0 for later use by the denorm handler. We also use the softpatch handler for the TM workarounds for POWER9. Unfortunately, in kvmppc_interrupt_hv we later store r11 out to the vcpu assuming it's still what we got from userspace. This causes r11 to be corrupted in the VCPU and hence when we restore the guest, we get a corrupted r11. We've seen this when running TM tests inside guests on P9. This fixes the problem by only touching r11 in the denorm case. Fixes: 4bb3c7a ("KVM: PPC: Book3S HV: Work around transactional memory bugs in POWER9") Cc: <stable@vger.kernel.org> # 4.17+ Test-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> Reviewed-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
1 parent 11da3a7 commit f14040b

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

arch/powerpc/kernel/exceptions-64s.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,9 +1314,7 @@ EXC_REAL_BEGIN(denorm_exception_hv, 0x1500, 0x100)
13141314

13151315
#ifdef CONFIG_PPC_DENORMALISATION
13161316
mfspr r10,SPRN_HSRR1
1317-
mfspr r11,SPRN_HSRR0 /* save HSRR0 */
13181317
andis. r10,r10,(HSRR1_DENORM)@h /* denorm? */
1319-
addi r11,r11,-4 /* HSRR0 is next instruction */
13201318
bne+ denorm_assist
13211319
#endif
13221320

@@ -1382,6 +1380,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
13821380
*/
13831381
XVCPSGNDP32(32)
13841382
denorm_done:
1383+
mfspr r11,SPRN_HSRR0
1384+
subi r11,r11,4
13851385
mtspr SPRN_HSRR0,r11
13861386
mtcrf 0x80,r9
13871387
ld r9,PACA_EXGEN+EX_R9(r13)

0 commit comments

Comments
 (0)