Browse Source
Merge pull request #8468 from liamwhite/dispatch-tracking
kernel: fix some uses of disable_count
pull/15/merge
bunnei
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
7 additions and
14 deletions
-
src/core/hle/kernel/k_process.cpp
-
src/core/hle/kernel/k_scheduler.cpp
-
src/core/hle/kernel/k_thread.cpp
-
src/core/hle/kernel/kernel.cpp
|
|
|
@ -57,18 +57,13 @@ void SetupMainThread(Core::System& system, KProcess& owner_process, u32 priority |
|
|
|
thread->GetContext64().cpu_registers[0] = 0; |
|
|
|
thread->GetContext32().cpu_registers[1] = thread_handle; |
|
|
|
thread->GetContext64().cpu_registers[1] = thread_handle; |
|
|
|
thread->DisableDispatch(); |
|
|
|
|
|
|
|
auto& kernel = system.Kernel(); |
|
|
|
// Threads by default are dormant, wake up the main thread so it runs when the scheduler fires
|
|
|
|
{ |
|
|
|
KScopedSchedulerLock lock{kernel}; |
|
|
|
thread->SetState(ThreadState::Runnable); |
|
|
|
|
|
|
|
if (system.DebuggerEnabled()) { |
|
|
|
thread->RequestSuspend(SuspendType::Debug); |
|
|
|
} |
|
|
|
if (system.DebuggerEnabled()) { |
|
|
|
thread->RequestSuspend(SuspendType::Debug); |
|
|
|
} |
|
|
|
|
|
|
|
// Run our thread.
|
|
|
|
void(thread->Run()); |
|
|
|
} |
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
|
|
|
|
|
|
@ -829,6 +829,7 @@ void KScheduler::Initialize() { |
|
|
|
idle_thread = KThread::Create(system.Kernel()); |
|
|
|
ASSERT(KThread::InitializeIdleThread(system, idle_thread, core_id).IsSuccess()); |
|
|
|
idle_thread->SetName(fmt::format("IdleThread:{}", core_id)); |
|
|
|
idle_thread->EnableDispatch(); |
|
|
|
} |
|
|
|
|
|
|
|
KScopedSchedulerLock::KScopedSchedulerLock(KernelCore& kernel) |
|
|
|
|
|
|
|
@ -225,7 +225,7 @@ ResultCode KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_s |
|
|
|
// Setup the stack parameters.
|
|
|
|
StackParameters& sp = GetStackParameters(); |
|
|
|
sp.cur_thread = this; |
|
|
|
sp.disable_count = 0; |
|
|
|
sp.disable_count = 1; |
|
|
|
SetInExceptionHandler(); |
|
|
|
|
|
|
|
// Set thread ID.
|
|
|
|
@ -1014,8 +1014,6 @@ ResultCode KThread::Run() { |
|
|
|
// Set our state and finish.
|
|
|
|
SetState(ThreadState::Runnable); |
|
|
|
|
|
|
|
DisableDispatch(); |
|
|
|
|
|
|
|
return ResultSuccess; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -254,7 +254,6 @@ struct KernelCore::Impl { |
|
|
|
core_id) |
|
|
|
.IsSuccess()); |
|
|
|
shutdown_threads[core_id]->SetName(fmt::format("SuspendThread:{}", core_id)); |
|
|
|
shutdown_threads[core_id]->DisableDispatch(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|