summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2010-06-28 13:57:41 -0500
committerPatrick Williams <iawillia@us.ibm.com>2010-06-28 13:57:41 -0500
commitd512759b3bbc3f3c7cd137842d9da2b5a5bc6e04 (patch)
tree50fce454d3997ac55f51539f37167897cfac41ef /src
parent741dd62ddbb5cd6ae5278265a0c612fc6a81c0e3 (diff)
downloadtalos-hostboot-d512759b3bbc3f3c7cd137842d9da2b5a5bc6e04.tar.gz
talos-hostboot-d512759b3bbc3f3c7cd137842d9da2b5a5bc6e04.zip
Move SPR restore to end of dispatch sequence.
Diffstat (limited to 'src')
-rw-r--r--src/kernel/start.S19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/kernel/start.S b/src/kernel/start.S
index 586b5ed82..7bb1fdd51 100644
--- a/src/kernel/start.S
+++ b/src/kernel/start.S
@@ -214,15 +214,6 @@ kernel_dispatch_task:
ldarx r0, 0, r1 ;// Clear the reservation by loading / storing
stdcx. r0, 0, r1 ;// the CPU pointer in the task.
- ld r28, TASK_LR(r1) ;// Load from context: LR, CR, CTR, XER
- ld r29, TASK_CR(r1)
- ld r30, TASK_CTR(r1)
- ld r31, TASK_XER(r1)
- mtlr r28 ;// Restore LR
- mtcr r29 ;// Restore CR
- mtctr r30 ;// Restore CTR
- mtxer r23 ;// Restore XER
-
mfmsr r2 ;// Get current MSR
ori r2,r2, 0xC000 ;// Enable MSR[EE,PR].
mtsrr1 r2 ;// Set task MSR (SRR1)
@@ -262,6 +253,16 @@ kernel_dispatch_task:
ld r29, TASK_GPR_29(r1) ;// GPR29
ld r30, TASK_GPR_30(r1) ;// GPR30
ld r31, TASK_GPR_31(r1) ;// GPR31
+
+ ld r28, TASK_LR(r1) ;// Load from context: LR, CR, CTR, XER
+ ld r29, TASK_CR(r1)
+ ld r30, TASK_CTR(r1)
+ ld r31, TASK_XER(r1)
+ mtlr r28 ;// Restore LR
+ mtcr r29 ;// Restore CR
+ mtctr r30 ;// Restore CTR
+ mtxer r31 ;// Restore XER
+
ld r1, TASK_GPR_1(r1) ;// GPR1
rfi ;// Execute task.
OpenPOWER on IntegriCloud