Commit c0fe7b09 authored by Bharat Bhushan's avatar Bharat Bhushan Committed by Avi Kivity

Restore guest CR after exit timing calculation

No instruction which can change Condition Register (CR) should be executed after
Guest CR is loaded. So the guest CR is restored after the Exit Timing in
lightweight_exit executes cmpw, which can clobber CR.
Signed-off-by: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent 0456ec4f
...@@ -580,7 +580,6 @@ lightweight_exit: ...@@ -580,7 +580,6 @@ lightweight_exit:
mtlr r3 mtlr r3
mtxer r5 mtxer r5
mtctr r6 mtctr r6
mtcr r7
mtsrr0 r8 mtsrr0 r8
mtsrr1 r9 mtsrr1 r9
...@@ -588,14 +587,20 @@ lightweight_exit: ...@@ -588,14 +587,20 @@ lightweight_exit:
/* save enter time */ /* save enter time */
1: 1:
mfspr r6, SPRN_TBRU mfspr r6, SPRN_TBRU
mfspr r7, SPRN_TBRL mfspr r9, SPRN_TBRL
mfspr r8, SPRN_TBRU mfspr r8, SPRN_TBRU
cmpw r8, r6 cmpw r8, r6
PPC_STL r7, VCPU_TIMING_LAST_ENTER_TBL(r4) PPC_STL r9, VCPU_TIMING_LAST_ENTER_TBL(r4)
bne 1b bne 1b
PPC_STL r8, VCPU_TIMING_LAST_ENTER_TBU(r4) PPC_STL r8, VCPU_TIMING_LAST_ENTER_TBU(r4)
#endif #endif
/*
* Don't execute any instruction which can change CR after
* below instruction.
*/
mtcr r7
/* Finish loading guest volatiles and jump to guest. */ /* Finish loading guest volatiles and jump to guest. */
PPC_LL r5, VCPU_GPR(r5)(r4) PPC_LL r5, VCPU_GPR(r5)(r4)
PPC_LL r6, VCPU_GPR(r6)(r4) PPC_LL r6, VCPU_GPR(r6)(r4)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment