mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-25 19:02:45 -06:00
Merge pull request #8468 from liamwhite/dispatch-tracking
kernel: fix some uses of disable_count
This commit is contained in:
commit
73e13aa090
4 changed files with 7 additions and 14 deletions
|
@ -57,18 +57,13 @@ void SetupMainThread(Core::System& system, KProcess& owner_process, u32 priority
|
||||||
thread->GetContext64().cpu_registers[0] = 0;
|
thread->GetContext64().cpu_registers[0] = 0;
|
||||||
thread->GetContext32().cpu_registers[1] = thread_handle;
|
thread->GetContext32().cpu_registers[1] = thread_handle;
|
||||||
thread->GetContext64().cpu_registers[1] = thread_handle;
|
thread->GetContext64().cpu_registers[1] = thread_handle;
|
||||||
thread->DisableDispatch();
|
|
||||||
|
|
||||||
auto& kernel = system.Kernel();
|
if (system.DebuggerEnabled()) {
|
||||||
// Threads by default are dormant, wake up the main thread so it runs when the scheduler fires
|
thread->RequestSuspend(SuspendType::Debug);
|
||||||
{
|
|
||||||
KScopedSchedulerLock lock{kernel};
|
|
||||||
thread->SetState(ThreadState::Runnable);
|
|
||||||
|
|
||||||
if (system.DebuggerEnabled()) {
|
|
||||||
thread->RequestSuspend(SuspendType::Debug);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run our thread.
|
||||||
|
void(thread->Run());
|
||||||
}
|
}
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
|
|
@ -829,6 +829,7 @@ void KScheduler::Initialize() {
|
||||||
idle_thread = KThread::Create(system.Kernel());
|
idle_thread = KThread::Create(system.Kernel());
|
||||||
ASSERT(KThread::InitializeIdleThread(system, idle_thread, core_id).IsSuccess());
|
ASSERT(KThread::InitializeIdleThread(system, idle_thread, core_id).IsSuccess());
|
||||||
idle_thread->SetName(fmt::format("IdleThread:{}", core_id));
|
idle_thread->SetName(fmt::format("IdleThread:{}", core_id));
|
||||||
|
idle_thread->EnableDispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
KScopedSchedulerLock::KScopedSchedulerLock(KernelCore& kernel)
|
KScopedSchedulerLock::KScopedSchedulerLock(KernelCore& kernel)
|
||||||
|
|
|
@ -225,7 +225,7 @@ ResultCode KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_s
|
||||||
// Setup the stack parameters.
|
// Setup the stack parameters.
|
||||||
StackParameters& sp = GetStackParameters();
|
StackParameters& sp = GetStackParameters();
|
||||||
sp.cur_thread = this;
|
sp.cur_thread = this;
|
||||||
sp.disable_count = 0;
|
sp.disable_count = 1;
|
||||||
SetInExceptionHandler();
|
SetInExceptionHandler();
|
||||||
|
|
||||||
// Set thread ID.
|
// Set thread ID.
|
||||||
|
@ -1014,8 +1014,6 @@ ResultCode KThread::Run() {
|
||||||
// Set our state and finish.
|
// Set our state and finish.
|
||||||
SetState(ThreadState::Runnable);
|
SetState(ThreadState::Runnable);
|
||||||
|
|
||||||
DisableDispatch();
|
|
||||||
|
|
||||||
return ResultSuccess;
|
return ResultSuccess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,6 @@ struct KernelCore::Impl {
|
||||||
core_id)
|
core_id)
|
||||||
.IsSuccess());
|
.IsSuccess());
|
||||||
shutdown_threads[core_id]->SetName(fmt::format("SuspendThread:{}", core_id));
|
shutdown_threads[core_id]->SetName(fmt::format("SuspendThread:{}", core_id));
|
||||||
shutdown_threads[core_id]->DisableDispatch();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue