aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kvm/book3s_hv_interrupts.S2
-rw-r--r--arch/powerpc/kvm/book3s_hv_rmhandlers.S13
2 files changed, 12 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_interrupts.S b/arch/powerpc/kvm/book3s_hv_interrupts.S
index 928142c64cb0..00b7ed41ea17 100644
--- a/arch/powerpc/kvm/book3s_hv_interrupts.S
+++ b/arch/powerpc/kvm/book3s_hv_interrupts.S
@@ -57,9 +57,11 @@ BEGIN_FTR_SECTION
57 std r3, HSTATE_DSCR(r13) 57 std r3, HSTATE_DSCR(r13)
58END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) 58END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
59 59
60BEGIN_FTR_SECTION
60 /* Save host DABR */ 61 /* Save host DABR */
61 mfspr r3, SPRN_DABR 62 mfspr r3, SPRN_DABR
62 std r3, HSTATE_DABR(r13) 63 std r3, HSTATE_DABR(r13)
64END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
63 65
64 /* Hard-disable interrupts */ 66 /* Hard-disable interrupts */
65 mfmsr r10 67 mfmsr r10
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index acbd1d6afba0..66db71c9156a 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -61,11 +61,13 @@ kvmppc_call_hv_entry:
61 61
62 /* Back from guest - restore host state and return to caller */ 62 /* Back from guest - restore host state and return to caller */
63 63
64BEGIN_FTR_SECTION
64 /* Restore host DABR and DABRX */ 65 /* Restore host DABR and DABRX */
65 ld r5,HSTATE_DABR(r13) 66 ld r5,HSTATE_DABR(r13)
66 li r6,7 67 li r6,7
67 mtspr SPRN_DABR,r5 68 mtspr SPRN_DABR,r5
68 mtspr SPRN_DABRX,r6 69 mtspr SPRN_DABRX,r6
70END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
69 71
70 /* Restore SPRG3 */ 72 /* Restore SPRG3 */
71 ld r3,PACA_SPRG3(r13) 73 ld r3,PACA_SPRG3(r13)
@@ -284,15 +286,17 @@ kvmppc_hv_entry:
284 std r0, PPC_LR_STKOFF(r1) 286 std r0, PPC_LR_STKOFF(r1)
285 stdu r1, -112(r1) 287 stdu r1, -112(r1)
286 288
289BEGIN_FTR_SECTION
287 /* Set partition DABR */ 290 /* Set partition DABR */
288 /* Do this before re-enabling PMU to avoid P7 DABR corruption bug */ 291 /* Do this before re-enabling PMU to avoid P7 DABR corruption bug */
289 li r5,3 292 li r5,3
290 ld r6,VCPU_DABR(r4) 293 ld r6,VCPU_DABR(r4)
291 mtspr SPRN_DABRX,r5 294 mtspr SPRN_DABRX,r5
292 mtspr SPRN_DABR,r6 295 mtspr SPRN_DABR,r6
293BEGIN_FTR_SECTION 296 BEGIN_FTR_SECTION_NESTED(89)
294 isync 297 isync
295END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) 298 END_FTR_SECTION_NESTED(CPU_FTR_ARCH_206, CPU_FTR_ARCH_206, 89)
299END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
296 300
297 /* Load guest PMU registers */ 301 /* Load guest PMU registers */
298 /* R4 is live here (vcpu pointer) */ 302 /* R4 is live here (vcpu pointer) */
@@ -1609,6 +1613,9 @@ ignore_hdec:
1609 b fast_guest_return 1613 b fast_guest_return
1610 1614
1611_GLOBAL(kvmppc_h_set_dabr) 1615_GLOBAL(kvmppc_h_set_dabr)
1616BEGIN_FTR_SECTION
1617 b 2f
1618END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
1612 std r4,VCPU_DABR(r3) 1619 std r4,VCPU_DABR(r3)
1613 /* Work around P7 bug where DABR can get corrupted on mtspr */ 1620 /* Work around P7 bug where DABR can get corrupted on mtspr */
16141: mtspr SPRN_DABR,r4 16211: mtspr SPRN_DABR,r4
@@ -1616,7 +1623,7 @@ _GLOBAL(kvmppc_h_set_dabr)
1616 cmpd r4, r5 1623 cmpd r4, r5
1617 bne 1b 1624 bne 1b
1618 isync 1625 isync
1619 li r3,0 16262: li r3,0
1620 blr 1627 blr
1621 1628
1622_GLOBAL(kvmppc_h_cede) 1629_GLOBAL(kvmppc_h_cede)