[PATCH v3 00/12] Rework stub syscall and page table handling
benjamin at sipsolutions.net
benjamin at sipsolutions.net
Fri May 24 14:37:06 PDT 2024
From: Benjamin Berg <benjamin.berg at intel.com>
This patchset reworks the stub syscall handling and also redos how page
table updates are tracked and synchronized. Some of this originated in
the SECCOMP patchset, but it became clear that these refactorings make
sense independently as they result in a considerably fewer page faults.
As an example, these changes bring the runtime of one of the hostapd
hwsim test modules from 121 seconds down to 103 seconds. Actual results
will depend heavily on how pagefault heavy the workload is.
Lowering the amount of pagefaults is due to proactively syncing PTEs
that are set (and were previously unset) and also delaying
synchronization so that multiple updates can be done in one step rather
than requiring multiple task switches.
This refactoring also fixes various odd corner cases in how UML was
handling memory and cloning of MMs. As part of this work, support for
LDTs has been dropped. My expectation is that this is not a problem as
it should only be needed by legacy applications.
Changes in v2:
* Address comments from Tiwei Bie
* Remove duplicate report_enomem declaration
Changes in v3:
* Remove more left over code from copy_context_skas0 removal
* Fix mprotect syscall in stub
Benjamin Berg (12):
um: Remove stub-data.h include from common-offsets.h
um: Create signal stack memory assignment in stub_data
um: Add generic stub_syscall6 function
um: Rework syscall handling
um: compress memory related stub syscalls while adding them
um: remove LDT support
um: remove copy_context_skas0
um: Delay flushing syscalls until the thread is restarted
um: Do not flush MM in flush_thread
um: remove force_flush_all from fork_handler
um: simplify and consolidate TLB updates
um: refactor TLB update handling
arch/um/drivers/ubd_kern.c | 2 -
arch/um/include/asm/mmu.h | 10 +-
arch/um/include/asm/mmu_context.h | 2 -
arch/um/include/asm/pgtable.h | 32 ++
arch/um/include/asm/tlbflush.h | 46 +-
arch/um/include/shared/as-layout.h | 2 +-
arch/um/include/shared/common-offsets.h | 5 -
arch/um/include/shared/os.h | 27 +-
arch/um/include/shared/skas/mm_id.h | 2 +-
arch/um/include/shared/skas/skas.h | 2 +
arch/um/include/shared/skas/stub-data.h | 36 +-
arch/um/include/shared/user.h | 8 +
arch/um/kernel/exec.c | 9 -
arch/um/kernel/process.c | 2 -
arch/um/kernel/skas/Makefile | 9 +-
arch/um/kernel/skas/clone.c | 48 ---
arch/um/kernel/skas/mmu.c | 33 +-
arch/um/kernel/skas/process.c | 18 +
arch/um/kernel/skas/stub.c | 69 +++
arch/um/kernel/tlb.c | 551 ++++--------------------
arch/um/kernel/trap.c | 15 +-
arch/um/os-Linux/skas/mem.c | 248 ++++++-----
arch/um/os-Linux/skas/process.c | 121 +-----
arch/um/os-Linux/start_up.c | 1 +
arch/x86/um/Makefile | 4 +-
arch/x86/um/asm/mm_context.h | 70 ---
arch/x86/um/ldt.c | 380 ----------------
arch/x86/um/shared/sysdep/stub.h | 2 +-
arch/x86/um/shared/sysdep/stub_32.h | 45 +-
arch/x86/um/shared/sysdep/stub_64.h | 41 +-
arch/x86/um/stub_32.S | 56 ---
arch/x86/um/stub_64.S | 50 ---
arch/x86/um/tls_32.c | 1 +
33 files changed, 535 insertions(+), 1412 deletions(-)
delete mode 100644 arch/um/kernel/skas/clone.c
create mode 100644 arch/um/kernel/skas/stub.c
delete mode 100644 arch/x86/um/asm/mm_context.h
delete mode 100644 arch/x86/um/ldt.c
delete mode 100644 arch/x86/um/stub_32.S
delete mode 100644 arch/x86/um/stub_64.S
--
2.45.1
More information about the linux-um
mailing list