um: adjust current_thread_info() for newer gcc versions
authorRichard Weinberger <richard@nod.at>
Wed, 27 Apr 2011 22:26:54 +0000 (15:26 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Apr 2011 18:28:21 +0000 (11:28 -0700)
In some cases gcc >= 4.5.2 will optimize away current_thread_info().  To
prevent gcc from doing so the stack address has to be obtained via inline
asm.

Signed-off-by: Richard Weinberger <richard@nod.at>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/um/include/asm/thread_info.h

index e2cf786bda0a28c43a8173ab40ec62ee2ab8a6de..5bd1bad33fab65fdd8f8857c3452768377e88290 100644 (file)
@@ -49,7 +49,10 @@ static inline struct thread_info *current_thread_info(void)
 {
        struct thread_info *ti;
        unsigned long mask = THREAD_SIZE - 1;
-       ti = (struct thread_info *) (((unsigned long) &ti) & ~mask);
+       void *p;
+
+       asm volatile ("" : "=r" (p) : "0" (&ti));
+       ti = (struct thread_info *) (((unsigned long)p) & ~mask);
        return ti;
 }