From d512759b3bbc3f3c7cd137842d9da2b5a5bc6e04 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Mon, 28 Jun 2010 13:57:41 -0500 Subject: Move SPR restore to end of dispatch sequence. --- src/kernel/start.S | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src') 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. -- cgit v1.2.1