s390/kvm: avoid global config of vm.alloc_pgste=1
The system control vm.alloc_pgste is used to control the size of the page tables, either 2K or 4K. The idea is that a KVM host sets the vm.alloc_pgste control to 1 which causes *all* new processes to run with 4K page tables. For a non-kvm system the control should stay off to save on memory used for page tables. Trouble is that distributions choose to set the control globally to be able to run KVM guests. This wastes memory on non-KVM systems. Introduce the PT_S390_PGSTE ELF segment type to "mark" the qemu executable with it. All executables with this (empty) segment in its ELF phdr array will be started with 4K page tables. Any executable without PT_S390_PGSTE will run with the default 2K page tables. This removes the need to set vm.alloc_pgste=1 for a KVM host and minimizes the waste of memory for page tables. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -52,7 +52,7 @@ _TIF_TRACE = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \
|
||||
_TIF_SYSCALL_TRACEPOINT)
|
||||
_CIF_WORK = (_CIF_MCCK_PENDING | _CIF_ASCE_PRIMARY | \
|
||||
_CIF_ASCE_SECONDARY | _CIF_FPU)
|
||||
_PIF_WORK = (_PIF_PER_TRAP)
|
||||
_PIF_WORK = (_PIF_PER_TRAP | _PIF_SYSCALL_RESTART)
|
||||
|
||||
#define BASED(name) name-cleanup_critical(%r13)
|
||||
|
||||
@@ -334,6 +334,8 @@ ENTRY(system_call)
|
||||
jo .Lsysc_mcck_pending
|
||||
TSTMSK __TI_flags(%r12),_TIF_NEED_RESCHED
|
||||
jo .Lsysc_reschedule
|
||||
TSTMSK __PT_FLAGS(%r11),_PIF_SYSCALL_RESTART
|
||||
jo .Lsysc_syscall_restart
|
||||
#ifdef CONFIG_UPROBES
|
||||
TSTMSK __TI_flags(%r12),_TIF_UPROBE
|
||||
jo .Lsysc_uprobe_notify
|
||||
@@ -347,6 +349,8 @@ ENTRY(system_call)
|
||||
jo .Lsysc_patch_pending # handle live patching just before
|
||||
# signals and possible syscall restart
|
||||
#endif
|
||||
TSTMSK __PT_FLAGS(%r11),_PIF_SYSCALL_RESTART
|
||||
jo .Lsysc_syscall_restart
|
||||
TSTMSK __TI_flags(%r12),_TIF_SIGPENDING
|
||||
jo .Lsysc_sigpending
|
||||
TSTMSK __TI_flags(%r12),_TIF_NOTIFY_RESUME
|
||||
@@ -447,6 +451,15 @@ ENTRY(system_call)
|
||||
larl %r14,.Lsysc_return
|
||||
jg do_per_trap
|
||||
|
||||
#
|
||||
# _PIF_SYSCALL_RESTART is set, repeat the current system call
|
||||
#
|
||||
.Lsysc_syscall_restart:
|
||||
ni __PT_FLAGS+7(%r11),255-_PIF_SYSCALL_RESTART
|
||||
lmg %r1,%r7,__PT_R1(%r11) # load svc arguments
|
||||
lg %r2,__PT_ORIG_GPR2(%r11)
|
||||
j .Lsysc_do_svc
|
||||
|
||||
#
|
||||
# call tracehook_report_syscall_entry/tracehook_report_syscall_exit before
|
||||
# and after the system call
|
||||
|
Reference in New Issue
Block a user