sparc: TIF_ABI_PENDING bit removal
David Miller [Fri, 29 Jan 2010 05:42:02 +0000 (21:42 -0800)]
Here are the sparc bits to remove TIF_ABI_PENDING now that
set_personality() is called at the appropriate place in exec.

Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

arch/sparc/include/asm/elf_64.h
arch/sparc/include/asm/thread_info_64.h
arch/sparc/kernel/process_64.c

index ff66bb8..e678803 100644 (file)
@@ -195,17 +195,10 @@ static inline unsigned int sparc64_elf_hwcap(void)
 #define ELF_PLATFORM   (NULL)
 
 #define SET_PERSONALITY(ex)                            \
-do {   unsigned long new_flags = current_thread_info()->flags; \
-       new_flags &= _TIF_32BIT;                        \
-       if ((ex).e_ident[EI_CLASS] == ELFCLASS32)       \
-               new_flags |= _TIF_32BIT;                \
+do {   if ((ex).e_ident[EI_CLASS] == ELFCLASS32)       \
+               set_thread_flag(TIF_32BIT);             \
        else                                            \
-               new_flags &= ~_TIF_32BIT;               \
-       if ((current_thread_info()->flags & _TIF_32BIT) \
-           != new_flags)                               \
-               set_thread_flag(TIF_ABI_PENDING);       \
-       else                                            \
-               clear_thread_flag(TIF_ABI_PENDING);     \
+               clear_thread_flag(TIF_32BIT);           \
        /* flush_thread will update pgd cache */        \
        if (personality(current->personality) != PER_LINUX32)   \
                set_personality(PER_LINUX |             \
index 7257ebb..39be9f2 100644 (file)
@@ -228,12 +228,11 @@ register struct thread_info *current_thread_info_reg asm("g6");
 #define TIF_SECCOMP            9       /* secure computing */
 #define TIF_SYSCALL_AUDIT      10      /* syscall auditing active */
 #define TIF_SYSCALL_TRACEPOINT 11      /* syscall tracepoint instrumentation */
-/* flag bit 11 is available */
 /* NOTE: Thread flags >= 12 should be ones we have no interest
  *       in using in assembly, else we can't use the mask as
  *       an immediate value in instructions such as andcc.
  */
-#define TIF_ABI_PENDING                12
+/* flag bit 12 is available */
 #define TIF_MEMDIE             13
 #define TIF_POLLING_NRFLAG     14
 #define TIF_FREEZE             15      /* is freezing for suspend */
@@ -248,7 +247,6 @@ register struct thread_info *current_thread_info_reg asm("g6");
 #define _TIF_SECCOMP           (1<<TIF_SECCOMP)
 #define _TIF_SYSCALL_AUDIT     (1<<TIF_SYSCALL_AUDIT)
 #define _TIF_SYSCALL_TRACEPOINT        (1<<TIF_SYSCALL_TRACEPOINT)
-#define _TIF_ABI_PENDING       (1<<TIF_ABI_PENDING)
 #define _TIF_POLLING_NRFLAG    (1<<TIF_POLLING_NRFLAG)
 #define _TIF_FREEZE            (1<<TIF_FREEZE)
 
index 18d6785..c3f1cce 100644 (file)
@@ -365,14 +365,6 @@ void flush_thread(void)
        struct thread_info *t = current_thread_info();
        struct mm_struct *mm;
 
-       if (test_ti_thread_flag(t, TIF_ABI_PENDING)) {
-               clear_ti_thread_flag(t, TIF_ABI_PENDING);
-               if (test_ti_thread_flag(t, TIF_32BIT))
-                       clear_ti_thread_flag(t, TIF_32BIT);
-               else
-                       set_ti_thread_flag(t, TIF_32BIT);
-       }
-
        mm = t->task->mm;
        if (mm)
                tsb_context_switch(mm);