powerpc: Use correct ccr bit for syscall error status
authorNathan Lynch <ntl@pobox.com>
Fri, 12 Mar 2010 13:16:02 +0000 (13:16 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 19 Mar 2010 05:38:16 +0000 (16:38 +1100)
The powerpc implementations of syscall_get_error and
syscall_set_return_value should use CCR0:S0 (0x10000000) for testing
and setting syscall error status.  Fortunately these APIs don't seem
to be used at the moment.

Signed-off-by: Nathan Lynch <ntl@pobox.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/syscall.h

index efa7f0b..23913e9 100644 (file)
@@ -30,7 +30,7 @@ static inline void syscall_rollback(struct task_struct *task,
 static inline long syscall_get_error(struct task_struct *task,
                                     struct pt_regs *regs)
 {
-       return (regs->ccr & 0x1000) ? -regs->gpr[3] : 0;
+       return (regs->ccr & 0x10000000) ? -regs->gpr[3] : 0;
 }
 
 static inline long syscall_get_return_value(struct task_struct *task,
@@ -44,10 +44,10 @@ static inline void syscall_set_return_value(struct task_struct *task,
                                            int error, long val)
 {
        if (error) {
-               regs->ccr |= 0x1000L;
+               regs->ccr |= 0x10000000L;
                regs->gpr[3] = -error;
        } else {
-               regs->ccr &= ~0x1000L;
+               regs->ccr &= ~0x10000000L;
                regs->gpr[3] = val;
        }
 }