87 lines
3.1 KiB
Diff
87 lines
3.1 KiB
Diff
From 94673e968cbcce07fa78dac4b0ae05d24b5816e1 Mon Sep 17 00:00:00 2001
|
|
From: David Miller <davem@davemloft.net>
|
|
Date: Thu, 28 Jan 2010 21:42:02 -0800
|
|
Subject: sparc: TIF_ABI_PENDING bit removal
|
|
|
|
From: David Miller <davem@davemloft.net>
|
|
|
|
commit 94673e968cbcce07fa78dac4b0ae05d24b5816e1 upstream.
|
|
|
|
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>
|
|
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
---
|
|
arch/sparc/include/asm/elf_64.h | 13 +++----------
|
|
arch/sparc/include/asm/thread_info_64.h | 4 +---
|
|
arch/sparc/kernel/process_64.c | 8 --------
|
|
3 files changed, 4 insertions(+), 21 deletions(-)
|
|
|
|
--- a/arch/sparc/include/asm/elf_64.h
|
|
+++ b/arch/sparc/include/asm/elf_64.h
|
|
@@ -196,17 +196,10 @@ static inline unsigned int sparc64_elf_h
|
|
#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 | \
|
|
--- a/arch/sparc/include/asm/thread_info_64.h
|
|
+++ b/arch/sparc/include/asm/thread_info_64.h
|
|
@@ -227,12 +227,11 @@ register struct thread_info *current_thr
|
|
/* flag bit 8 is available */
|
|
#define TIF_SECCOMP 9 /* secure computing */
|
|
#define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */
|
|
-/* 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 */
|
|
@@ -246,7 +245,6 @@ register struct thread_info *current_thr
|
|
#define _TIF_32BIT (1<<TIF_32BIT)
|
|
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
|
|
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
|
|
-#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
|
|
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
|
#define _TIF_FREEZE (1<<TIF_FREEZE)
|
|
|
|
--- a/arch/sparc/kernel/process_64.c
|
|
+++ b/arch/sparc/kernel/process_64.c
|
|
@@ -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);
|