From 5ce1cc89a0da5596b4bb2f39568a1511fda36cda Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 19 Jan 2020 17:16:38 +0100 Subject: [PATCH] Kernel: Add fast-path for sys$gettid() The userspace locks are very aggressively calling sys$gettid() to find out which thread ID they have. Since syscalls are quite heavy, this can get very expensive for some programs. This patch adds a fast-path for sys$gettid(), which makes it skip all of the usual syscall validation and just return the thread ID right away. This cuts Kernel/Process.cpp compile time by ~18%, from ~29 to ~24 sec. --- Kernel/Syscall.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index a0e73b9620..a0d297e96e 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -119,6 +119,14 @@ int handle(RegisterDump& regs, u32 function, u32 arg1, u32 arg2, u32 arg3) void syscall_handler(RegisterDump regs) { + // Special handling of the "gettid" syscall since it's extremely hot. + // FIXME: Remove this hack once userspace locks stop calling it so damn much. + if (regs.eax == SC_gettid) { + regs.eax = current->process().sys$gettid(); + current->did_syscall(); + return; + } + // Make sure SMAP protection is enabled on syscall entry. clac();