mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
s390/uaccess: always run the kernel in home space
Simplify the uaccess code by removing the user_mode=home option. The kernel will now always run in the home space mode. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
7d7c7b24e4
commit
e258d719ff
21 changed files with 51 additions and 459 deletions
|
@ -64,12 +64,6 @@
|
|||
#include <asm/sclp.h>
|
||||
#include "entry.h"
|
||||
|
||||
long psw_kernel_bits = PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_PRIMARY |
|
||||
PSW_MASK_EA | PSW_MASK_BA;
|
||||
long psw_user_bits = PSW_MASK_DAT | PSW_MASK_IO | PSW_MASK_EXT |
|
||||
PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_MASK_MCHECK |
|
||||
PSW_MASK_PSTATE | PSW_ASC_HOME;
|
||||
|
||||
/*
|
||||
* User copy operations.
|
||||
*/
|
||||
|
@ -300,43 +294,14 @@ static int __init parse_vmalloc(char *arg)
|
|||
}
|
||||
early_param("vmalloc", parse_vmalloc);
|
||||
|
||||
unsigned int s390_user_mode = PRIMARY_SPACE_MODE;
|
||||
EXPORT_SYMBOL_GPL(s390_user_mode);
|
||||
|
||||
static void __init set_user_mode_primary(void)
|
||||
{
|
||||
psw_kernel_bits = (psw_kernel_bits & ~PSW_MASK_ASC) | PSW_ASC_HOME;
|
||||
psw_user_bits = (psw_user_bits & ~PSW_MASK_ASC) | PSW_ASC_PRIMARY;
|
||||
#ifdef CONFIG_COMPAT
|
||||
psw32_user_bits =
|
||||
(psw32_user_bits & ~PSW32_MASK_ASC) | PSW32_ASC_PRIMARY;
|
||||
#endif
|
||||
uaccess = MACHINE_HAS_MVCOS ? uaccess_mvcos_switch : uaccess_pt;
|
||||
}
|
||||
|
||||
static int __init early_parse_user_mode(char *p)
|
||||
{
|
||||
if (p && strcmp(p, "primary") == 0)
|
||||
s390_user_mode = PRIMARY_SPACE_MODE;
|
||||
else if (!p || strcmp(p, "home") == 0)
|
||||
s390_user_mode = HOME_SPACE_MODE;
|
||||
else
|
||||
return 1;
|
||||
return 0;
|
||||
if (!p || strcmp(p, "primary") == 0)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
early_param("user_mode", early_parse_user_mode);
|
||||
|
||||
static void __init setup_addressing_mode(void)
|
||||
{
|
||||
if (s390_user_mode != PRIMARY_SPACE_MODE)
|
||||
return;
|
||||
set_user_mode_primary();
|
||||
if (MACHINE_HAS_MVCOS)
|
||||
pr_info("Address spaces switched, mvcos available\n");
|
||||
else
|
||||
pr_info("Address spaces switched, mvcos not available\n");
|
||||
}
|
||||
|
||||
void *restart_stack __attribute__((__section__(".data")));
|
||||
|
||||
static void __init setup_lowcore(void)
|
||||
|
@ -348,24 +313,24 @@ static void __init setup_lowcore(void)
|
|||
*/
|
||||
BUILD_BUG_ON(sizeof(struct _lowcore) != LC_PAGES * 4096);
|
||||
lc = __alloc_bootmem_low(LC_PAGES * PAGE_SIZE, LC_PAGES * PAGE_SIZE, 0);
|
||||
lc->restart_psw.mask = psw_kernel_bits;
|
||||
lc->restart_psw.mask = PSW_KERNEL_BITS;
|
||||
lc->restart_psw.addr =
|
||||
PSW_ADDR_AMODE | (unsigned long) restart_int_handler;
|
||||
lc->external_new_psw.mask = psw_kernel_bits |
|
||||
lc->external_new_psw.mask = PSW_KERNEL_BITS |
|
||||
PSW_MASK_DAT | PSW_MASK_MCHECK;
|
||||
lc->external_new_psw.addr =
|
||||
PSW_ADDR_AMODE | (unsigned long) ext_int_handler;
|
||||
lc->svc_new_psw.mask = psw_kernel_bits |
|
||||
lc->svc_new_psw.mask = PSW_KERNEL_BITS |
|
||||
PSW_MASK_DAT | PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK;
|
||||
lc->svc_new_psw.addr = PSW_ADDR_AMODE | (unsigned long) system_call;
|
||||
lc->program_new_psw.mask = psw_kernel_bits |
|
||||
lc->program_new_psw.mask = PSW_KERNEL_BITS |
|
||||
PSW_MASK_DAT | PSW_MASK_MCHECK;
|
||||
lc->program_new_psw.addr =
|
||||
PSW_ADDR_AMODE | (unsigned long) pgm_check_handler;
|
||||
lc->mcck_new_psw.mask = psw_kernel_bits;
|
||||
lc->mcck_new_psw.mask = PSW_KERNEL_BITS;
|
||||
lc->mcck_new_psw.addr =
|
||||
PSW_ADDR_AMODE | (unsigned long) mcck_int_handler;
|
||||
lc->io_new_psw.mask = psw_kernel_bits |
|
||||
lc->io_new_psw.mask = PSW_KERNEL_BITS |
|
||||
PSW_MASK_DAT | PSW_MASK_MCHECK;
|
||||
lc->io_new_psw.addr = PSW_ADDR_AMODE | (unsigned long) io_int_handler;
|
||||
lc->clock_comparator = -1ULL;
|
||||
|
@ -1043,10 +1008,7 @@ void __init setup_arch(char **cmdline_p)
|
|||
init_mm.end_data = (unsigned long) &_edata;
|
||||
init_mm.brk = (unsigned long) &_end;
|
||||
|
||||
if (MACHINE_HAS_MVCOS)
|
||||
memcpy(&uaccess, &uaccess_mvcos, sizeof(uaccess));
|
||||
else
|
||||
memcpy(&uaccess, &uaccess_std, sizeof(uaccess));
|
||||
uaccess = MACHINE_HAS_MVCOS ? uaccess_mvcos : uaccess_pt;
|
||||
|
||||
parse_early_param();
|
||||
detect_memory_layout(memory_chunk, memory_end);
|
||||
|
@ -1054,7 +1016,6 @@ void __init setup_arch(char **cmdline_p)
|
|||
setup_ipl();
|
||||
reserve_oldmem();
|
||||
setup_memory_end();
|
||||
setup_addressing_mode();
|
||||
reserve_crashkernel();
|
||||
setup_memory();
|
||||
setup_resources();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue