diff options
Diffstat (limited to 'arch/um/kernel/um_arch.c')
| -rw-r--r-- | arch/um/kernel/um_arch.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index 8dcda617b8bf..0a23a98d4ca0 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c @@ -326,9 +326,13 @@ int __init linux_main(int argc, char **argv)  		add_arg(DEFAULT_COMMAND_LINE_CONSOLE);  	host_task_size = os_get_top_address(); -	/* reserve two pages for the stubs */ -	host_task_size -= 2 * PAGE_SIZE; -	stub_start = host_task_size; +	/* reserve a few pages for the stubs (taking care of data alignment) */ +	/* align the data portion */ +	BUILD_BUG_ON(!is_power_of_2(STUB_DATA_PAGES)); +	stub_start = (host_task_size - 1) & ~(STUB_DATA_PAGES * PAGE_SIZE - 1); +	/* another page for the code portion */ +	stub_start -= PAGE_SIZE; +	host_task_size = stub_start;  	/*  	 * TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps | 
