x86: Factor out TIF_IA32 from 32-bit address space
Factor out IA32 (compatibility instruction set) from 32-bit address space in the thread_info flags; this is a precondition patch for x32 support. Originally-by: H. J. Lu <hjl.tools@gmail.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Link: http://lkml.kernel.org/n/tip-4pr1xnnksprt7t0h3w5fw4rv@git.kernel.org
This commit is contained in:
@@ -508,6 +508,7 @@ void set_personality_64bit(void)
|
||||
|
||||
/* Make sure to be in 64bit mode */
|
||||
clear_thread_flag(TIF_IA32);
|
||||
clear_thread_flag(TIF_ADDR32);
|
||||
|
||||
/* Ensure the corresponding mm is not marked. */
|
||||
if (current->mm)
|
||||
@@ -526,6 +527,7 @@ void set_personality_ia32(void)
|
||||
|
||||
/* Make sure to be in 32bit mode */
|
||||
set_thread_flag(TIF_IA32);
|
||||
set_thread_flag(TIF_ADDR32);
|
||||
current->personality |= force_personality32;
|
||||
|
||||
/* Mark the associated mm as containing 32-bit tasks. */
|
||||
|
@@ -98,7 +98,7 @@ out:
|
||||
static void find_start_end(unsigned long flags, unsigned long *begin,
|
||||
unsigned long *end)
|
||||
{
|
||||
if (!test_thread_flag(TIF_IA32) && (flags & MAP_32BIT)) {
|
||||
if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT)) {
|
||||
unsigned long new_begin;
|
||||
/* This is usually used needed to map code in small
|
||||
model, so it needs to be in the first 31bit. Limit
|
||||
@@ -144,7 +144,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
||||
(!vma || addr + len <= vma->vm_start))
|
||||
return addr;
|
||||
}
|
||||
if (((flags & MAP_32BIT) || test_thread_flag(TIF_IA32))
|
||||
if (((flags & MAP_32BIT) || test_thread_flag(TIF_ADDR32))
|
||||
&& len <= mm->cached_hole_size) {
|
||||
mm->cached_hole_size = 0;
|
||||
mm->free_area_cache = begin;
|
||||
@@ -205,7 +205,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
|
||||
return addr;
|
||||
|
||||
/* for MAP_32BIT mappings we force the legact mmap base */
|
||||
if (!test_thread_flag(TIF_IA32) && (flags & MAP_32BIT))
|
||||
if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT))
|
||||
goto bottomup;
|
||||
|
||||
/* requesting a specific address */
|
||||
|
Viittaa uudesa ongelmassa
Block a user