From b2ebf6c7985534968b3238e06e0e43a70b2bebb8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 20 Apr 2019 19:23:45 +0200 Subject: [PATCH] Kernel: Shrink Thread by making kernel resume TSS heap-allocated. --- Kernel/Process.cpp | 3 ++- Kernel/Thread.cpp | 4 ++-- Kernel/Thread.h | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 2a841a1089..4a130e3420 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -694,7 +694,8 @@ void Process::sys$sigreturn() { InterruptDisabler disabler; Scheduler::prepare_to_modify_tss(*current); - current->m_tss = current->m_tss_to_resume_kernel; + current->m_tss = *current->m_tss_to_resume_kernel; + current->m_tss_to_resume_kernel.clear(); #ifdef SIGNAL_DEBUG kprintf("sys$sigreturn in %s(%u)\n", name().characters(), pid()); auto& tss = current->tss(); diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index ebd43a23b4..87295fc6b9 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -347,9 +347,9 @@ ShouldUnblockThread Thread::dispatch_signal(byte signal) kprintf("dispatch_signal to %s(%u) in state=%s with return to %w:%x\n", name().characters(), pid(), to_string(state()), ret_cs, ret_eip); #endif ASSERT(is_blocked()); - m_tss_to_resume_kernel = m_tss; + m_tss_to_resume_kernel = make(m_tss); #ifdef SIGNAL_DEBUG - kprintf("resume tss pc: %w:%x stack: %w:%x flags: %x cr3: %x\n", m_tss_to_resume_kernel.cs, m_tss_to_resume_kernel.eip, m_tss_to_resume_kernel.ss, m_tss_to_resume_kernel.esp, m_tss_to_resume_kernel.eflags, m_tss_to_resume_kernel.cr3); + kprintf("resume tss pc: %w:%x stack: %w:%x flags: %x cr3: %x\n", m_tss_to_resume_kernel.cs, m_tss_to_resume_kernel->eip, m_tss_to_resume_kernel->ss, m_tss_to_resume_kernel->esp, m_tss_to_resume_kernel->eflags, m_tss_to_resume_kernel->cr3); #endif if (!m_signal_stack_user_region) { diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 1a898dd82f..c0609daea0 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -138,7 +139,7 @@ private: Process& m_process; int m_tid { -1 }; TSS32 m_tss; - TSS32 m_tss_to_resume_kernel; + OwnPtr m_tss_to_resume_kernel; FarPtr m_far_ptr; dword m_ticks { 0 }; dword m_ticks_left { 0 };