diff options
| -rw-r--r-- | arch/sparc/include/asm/elf_64.h | 13 | ||||
| -rw-r--r-- | arch/sparc/include/asm/thread_info_64.h | 4 | ||||
| -rw-r--r-- | arch/sparc/kernel/process_64.c | 8 |
3 files changed, 4 insertions, 21 deletions
diff --git a/arch/sparc/include/asm/elf_64.h b/arch/sparc/include/asm/elf_64.h index ff66bb88537b..e67880381b84 100644 --- a/arch/sparc/include/asm/elf_64.h +++ b/arch/sparc/include/asm/elf_64.h | |||
| @@ -195,17 +195,10 @@ static inline unsigned int sparc64_elf_hwcap(void) | |||
| 195 | #define ELF_PLATFORM (NULL) | 195 | #define ELF_PLATFORM (NULL) |
| 196 | 196 | ||
| 197 | #define SET_PERSONALITY(ex) \ | 197 | #define SET_PERSONALITY(ex) \ |
| 198 | do { unsigned long new_flags = current_thread_info()->flags; \ | 198 | do { if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ |
| 199 | new_flags &= _TIF_32BIT; \ | 199 | set_thread_flag(TIF_32BIT); \ |
| 200 | if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ | ||
| 201 | new_flags |= _TIF_32BIT; \ | ||
| 202 | else \ | 200 | else \ |
| 203 | new_flags &= ~_TIF_32BIT; \ | 201 | clear_thread_flag(TIF_32BIT); \ |
| 204 | if ((current_thread_info()->flags & _TIF_32BIT) \ | ||
| 205 | != new_flags) \ | ||
| 206 | set_thread_flag(TIF_ABI_PENDING); \ | ||
| 207 | else \ | ||
| 208 | clear_thread_flag(TIF_ABI_PENDING); \ | ||
| 209 | /* flush_thread will update pgd cache */ \ | 202 | /* flush_thread will update pgd cache */ \ |
| 210 | if (personality(current->personality) != PER_LINUX32) \ | 203 | if (personality(current->personality) != PER_LINUX32) \ |
| 211 | set_personality(PER_LINUX | \ | 204 | set_personality(PER_LINUX | \ |
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 7257ebb8f394..39be9f256e5a 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
| @@ -228,12 +228,11 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
| 228 | #define TIF_SECCOMP 9 /* secure computing */ | 228 | #define TIF_SECCOMP 9 /* secure computing */ |
| 229 | #define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */ | 229 | #define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */ |
| 230 | #define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */ | 230 | #define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */ |
| 231 | /* flag bit 11 is available */ | ||
| 232 | /* NOTE: Thread flags >= 12 should be ones we have no interest | 231 | /* NOTE: Thread flags >= 12 should be ones we have no interest |
| 233 | * in using in assembly, else we can't use the mask as | 232 | * in using in assembly, else we can't use the mask as |
| 234 | * an immediate value in instructions such as andcc. | 233 | * an immediate value in instructions such as andcc. |
| 235 | */ | 234 | */ |
| 236 | #define TIF_ABI_PENDING 12 | 235 | /* flag bit 12 is available */ |
| 237 | #define TIF_MEMDIE 13 | 236 | #define TIF_MEMDIE 13 |
| 238 | #define TIF_POLLING_NRFLAG 14 | 237 | #define TIF_POLLING_NRFLAG 14 |
| 239 | #define TIF_FREEZE 15 /* is freezing for suspend */ | 238 | #define TIF_FREEZE 15 /* is freezing for suspend */ |
| @@ -248,7 +247,6 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
| 248 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) | 247 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) |
| 249 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | 248 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) |
| 250 | #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) | 249 | #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) |
| 251 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) | ||
| 252 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 250 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
| 253 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 251 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
| 254 | 252 | ||
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c index 18d67854a1b8..c3f1cce0e95e 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c | |||
| @@ -365,14 +365,6 @@ void flush_thread(void) | |||
| 365 | struct thread_info *t = current_thread_info(); | 365 | struct thread_info *t = current_thread_info(); |
| 366 | struct mm_struct *mm; | 366 | struct mm_struct *mm; |
| 367 | 367 | ||
| 368 | if (test_ti_thread_flag(t, TIF_ABI_PENDING)) { | ||
| 369 | clear_ti_thread_flag(t, TIF_ABI_PENDING); | ||
| 370 | if (test_ti_thread_flag(t, TIF_32BIT)) | ||
| 371 | clear_ti_thread_flag(t, TIF_32BIT); | ||
| 372 | else | ||
| 373 | set_ti_thread_flag(t, TIF_32BIT); | ||
| 374 | } | ||
| 375 | |||
| 376 | mm = t->task->mm; | 368 | mm = t->task->mm; |
| 377 | if (mm) | 369 | if (mm) |
| 378 | tsb_context_switch(mm); | 370 | tsb_context_switch(mm); |
