From ef538dc6c89e99888fae4d2394d83fd80998e3dc Mon Sep 17 00:00:00 2001 From: Anton Blanchard Date: Thu, 5 Apr 2012 03:44:48 +0000 Subject: [PATCH] --- yaml --- r: 305338 b: refs/heads/master c: fd6c40f3b00a1e76d6a920cb6591907c53450afc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/entry_64.S | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index fefd99b817e3..227401d829a8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 82087414c608440c5ca7faa5c2fb6327daebcd15 +refs/heads/master: fd6c40f3b00a1e76d6a920cb6591907c53450afc diff --git a/trunk/arch/powerpc/kernel/entry_64.S b/trunk/arch/powerpc/kernel/entry_64.S index ba72ddbe5238..fd4604674468 100644 --- a/trunk/arch/powerpc/kernel/entry_64.S +++ b/trunk/arch/powerpc/kernel/entry_64.S @@ -63,15 +63,9 @@ system_call_common: std r0,GPR0(r1) std r10,GPR1(r1) ACCOUNT_CPU_USER_ENTRY(r10, r11) - /* - * This "crclr so" clears CR0.SO, which is the error indication on - * return from this system call. There must be no cmp instruction - * between it and the "mfcr r9" below, otherwise if XER.SO is set, - * CR0.SO will get set, causing all system calls to appear to fail. - */ - crclr so std r2,GPR2(r1) std r3,GPR3(r1) + mfcr r2 std r4,GPR4(r1) std r5,GPR5(r1) std r6,GPR6(r1) @@ -85,13 +79,17 @@ system_call_common: std r11,_XER(r1) std r11,_CTR(r1) std r9,GPR13(r1) - mfcr r9 mflr r10 + /* + * This clears CR0.SO (bit 28), which is the error indication on + * return from this system call. + */ + rldimi r2,r11,28,(63-28) li r11,0xc01 - std r9,_CCR(r1) std r10,_LINK(r1) std r11,_TRAP(r1) std r3,ORIG_GPR3(r1) + std r2,_CCR(r1) ld r2,PACATOC(r13) addi r9,r1,STACK_FRAME_OVERHEAD ld r11,exception_marker@toc(r2)