Merge branch 'linux-next' of git://git.infradead.org/ubi-2.6
[pandora-kernel.git] / arch / powerpc / oprofile / backtrace.c
index 75f57bc..f75301f 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/sched.h>
 #include <asm/processor.h>
 #include <asm/uaccess.h>
+#include <asm/compat.h>
 
 #define STACK_SP(STACK)                *(STACK)
 
@@ -26,8 +27,9 @@
 static unsigned int user_getsp32(unsigned int sp, int is_first)
 {
        unsigned int stack_frame[2];
+       void __user *p = compat_ptr(sp);
 
-       if (!access_ok(VERIFY_READ, sp, sizeof(stack_frame)))
+       if (!access_ok(VERIFY_READ, p, sizeof(stack_frame)))
                return 0;
 
        /*
@@ -35,8 +37,7 @@ static unsigned int user_getsp32(unsigned int sp, int is_first)
         * which means that we've done all that we can do from
         * interrupt context.
         */
-       if (__copy_from_user_inatomic(stack_frame, (void *)(long)sp,
-                                       sizeof(stack_frame)))
+       if (__copy_from_user_inatomic(stack_frame, p, sizeof(stack_frame)))
                return 0;
 
        if (!is_first)
@@ -54,10 +55,10 @@ static unsigned long user_getsp64(unsigned long sp, int is_first)
 {
        unsigned long stack_frame[3];
 
-       if (!access_ok(VERIFY_READ, sp, sizeof(stack_frame)))
+       if (!access_ok(VERIFY_READ, (void __user *)sp, sizeof(stack_frame)))
                return 0;
 
-       if (__copy_from_user_inatomic(stack_frame, (void *)sp,
+       if (__copy_from_user_inatomic(stack_frame, (void __user *)sp,
                                        sizeof(stack_frame)))
                return 0;
 
@@ -104,7 +105,7 @@ void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth)
                }
        } else {
 #ifdef CONFIG_PPC64
-               if (!test_thread_flag(TIF_32BIT)) {
+               if (!is_32bit_task()) {
                        while (depth--) {
                                sp = user_getsp64(sp, first_frame);
                                if (!sp)