aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/bookehv_interrupts.S
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-02-16 09:53:04 -0500
committerAvi Kivity <avi@redhat.com>2012-04-08 05:55:14 -0400
commite9ba39c1f3dff93efddacbd4569ada05633e2a9b (patch)
tree06006536ab6f4da04a82e47b593dc20bad8a291d /arch/powerpc/kvm/bookehv_interrupts.S
parent8a3da55784cf2aea8ef6acdd1f50e5ad52f76574 (diff)
KVM: PPC: bookehv: disable MAS register updates early
We need to make sure that no MAS updates happen automatically while we have the guest MAS registers loaded. So move the disabling code a bit higher up so that it covers the full time we have guest values in MAS registers. The race this patch fixes should never occur, but it makes the code a bit more logical to do it this way around. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kvm/bookehv_interrupts.S')
-rw-r--r--arch/powerpc/kvm/bookehv_interrupts.S10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
index dfa606dedb4..3a1db909947 100644
--- a/arch/powerpc/kvm/bookehv_interrupts.S
+++ b/arch/powerpc/kvm/bookehv_interrupts.S
@@ -358,6 +358,7 @@ _GLOBAL(kvmppc_resume_host)
358 mtspr SPRN_MAS4, r6 358 mtspr SPRN_MAS4, r6
359 stw r5, VCPU_SHARED_MAS7_3+0(r11) 359 stw r5, VCPU_SHARED_MAS7_3+0(r11)
360 mtspr SPRN_MAS6, r8 360 mtspr SPRN_MAS6, r8
361 /* Enable MAS register updates via exception */
361 mfspr r3, SPRN_EPCR 362 mfspr r3, SPRN_EPCR
362 rlwinm r3, r3, 0, ~SPRN_EPCR_DMIUH 363 rlwinm r3, r3, 0, ~SPRN_EPCR_DMIUH
363 mtspr SPRN_EPCR, r3 364 mtspr SPRN_EPCR, r3
@@ -515,6 +516,11 @@ lightweight_exit:
515 mtspr SPRN_PID, r3 516 mtspr SPRN_PID, r3
516 517
517 PPC_LL r11, VCPU_SHARED(r4) 518 PPC_LL r11, VCPU_SHARED(r4)
519 /* Disable MAS register updates via exception */
520 mfspr r3, SPRN_EPCR
521 oris r3, r3, SPRN_EPCR_DMIUH@h
522 mtspr SPRN_EPCR, r3
523 isync
518 /* Save host mas4 and mas6 and load guest MAS registers */ 524 /* Save host mas4 and mas6 and load guest MAS registers */
519 mfspr r3, SPRN_MAS4 525 mfspr r3, SPRN_MAS4
520 stw r3, VCPU_HOST_MAS4(r4) 526 stw r3, VCPU_HOST_MAS4(r4)
@@ -538,10 +544,6 @@ lightweight_exit:
538 lwz r5, VCPU_SHARED_MAS7_3+0(r11) 544 lwz r5, VCPU_SHARED_MAS7_3+0(r11)
539 mtspr SPRN_MAS6, r3 545 mtspr SPRN_MAS6, r3
540 mtspr SPRN_MAS7, r5 546 mtspr SPRN_MAS7, r5
541 /* Disable MAS register updates via exception */
542 mfspr r3, SPRN_EPCR
543 oris r3, r3, SPRN_EPCR_DMIUH@h
544 mtspr SPRN_EPCR, r3
545 547
546 /* 548 /*
547 * Host interrupt handlers may have clobbered these guest-readable 549 * Host interrupt handlers may have clobbered these guest-readable