diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 39d1d4b940..7e496c65ca 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -39,10 +39,6 @@ UNMAP_AFTER_INIT void Thread::initialize() KResultOr> Thread::try_create(NonnullRefPtr process) { - auto fpu_state = try_make(); - if (!fpu_state) - return ENOMEM; - auto kernel_stack_region = MM.allocate_kernel_region(default_kernel_stack_size, {}, Region::Access::Read | Region::Access::Write, AllocationStrategy::AllocateNow); if (!kernel_stack_region) return ENOMEM; @@ -54,17 +50,16 @@ KResultOr> Thread::try_create(NonnullRefPtr proce auto name = KString::try_create(process->name()); - auto thread = adopt_ref_if_nonnull(new (nothrow) Thread(move(process), kernel_stack_region.release_nonnull(), block_timer.release_nonnull(), fpu_state.release_nonnull(), move(name))); + auto thread = adopt_ref_if_nonnull(new (nothrow) Thread(move(process), kernel_stack_region.release_nonnull(), block_timer.release_nonnull(), move(name))); if (!thread) return ENOMEM; return thread.release_nonnull(); } -Thread::Thread(NonnullRefPtr process, NonnullOwnPtr kernel_stack_region, NonnullRefPtr block_timer, NonnullOwnPtr fpu_state, OwnPtr name) +Thread::Thread(NonnullRefPtr process, NonnullOwnPtr kernel_stack_region, NonnullRefPtr block_timer, OwnPtr name) : m_process(move(process)) , m_kernel_stack_region(move(kernel_stack_region)) - , m_fpu_state(move(fpu_state)) , m_name(move(name)) , m_block_timer(block_timer) , m_global_procfs_inode_index(ProcFSComponentRegistry::the().allocate_inode_index()) @@ -1067,7 +1062,7 @@ RefPtr Thread::clone(Process& process) auto signal_action_data_span = m_signal_action_data.span(); signal_action_data_span.copy_to(clone->m_signal_action_data.span()); clone->m_signal_mask = m_signal_mask; - memcpy(clone->m_fpu_state, m_fpu_state, sizeof(FPUState)); + clone->m_fpu_state = m_fpu_state; clone->m_thread_specific_data = m_thread_specific_data; return clone; } @@ -1267,7 +1262,7 @@ RefPtr Thread::from_tid(ThreadID tid) void Thread::reset_fpu_state() { - memcpy(m_fpu_state, &Processor::current().clean_fpu_state(), sizeof(FPUState)); + memcpy(&m_fpu_state, &Processor::current().clean_fpu_state(), sizeof(FPUState)); } bool Thread::should_be_stopped() const diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 1194040e00..933a3e95e7 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -1038,7 +1038,7 @@ public: u32 pending_signals() const; u32 pending_signals_for_state() const; - FPUState& fpu_state() { return *m_fpu_state; } + FPUState& fpu_state() { return m_fpu_state; } KResult make_thread_specific_region(Badge); @@ -1215,7 +1215,7 @@ public: String backtrace(); private: - Thread(NonnullRefPtr, NonnullOwnPtr, NonnullRefPtr, NonnullOwnPtr, OwnPtr); + Thread(NonnullRefPtr, NonnullOwnPtr, NonnullRefPtr, OwnPtr); IntrusiveListNode m_process_thread_list_node; int m_runnable_priority { -1 }; @@ -1344,7 +1344,7 @@ private: unsigned m_ipv4_socket_read_bytes { 0 }; unsigned m_ipv4_socket_write_bytes { 0 }; - OwnPtr m_fpu_state; + FPUState m_fpu_state {}; State m_state { Invalid }; OwnPtr m_name; u32 m_priority { THREAD_PRIORITY_NORMAL };