diff options
author | bunnei <bunneidev@gmail.com> | 2022-08-07 17:48:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-07 17:48:55 -0700 |
commit | 01bb5d5c4d10424145739e4dd50c0a92547ca240 (patch) | |
tree | 403f5ae1f6ea1d4555a40dbea0f2c44183292aba /src/core/debugger/debugger.cpp | |
parent | 30515b3b2788b34610bfbda5ad3bc327660d7213 (diff) | |
parent | 6523854dd6ac2d202dacb2110bc83b8e61621e9a (diff) |
Merge pull request #8637 from liamwhite/bad-interrupts
kernel: unlayer CPU interrupt handling
Diffstat (limited to 'src/core/debugger/debugger.cpp')
-rw-r--r-- | src/core/debugger/debugger.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/core/debugger/debugger.cpp b/src/core/debugger/debugger.cpp index ac64d2f9d..e42bdd17d 100644 --- a/src/core/debugger/debugger.cpp +++ b/src/core/debugger/debugger.cpp @@ -15,6 +15,7 @@ #include "core/debugger/debugger_interface.h" #include "core/debugger/gdbstub.h" #include "core/hle/kernel/global_scheduler_context.h" +#include "core/hle/kernel/k_scheduler.h" template <typename Readable, typename Buffer, typename Callback> static void AsyncReceiveInto(Readable& r, Buffer& buffer, Callback&& c) { @@ -230,13 +231,12 @@ private: } void PauseEmulation() { + Kernel::KScopedSchedulerLock sl{system.Kernel()}; + // Put all threads to sleep on next scheduler round. for (auto* thread : ThreadList()) { thread->RequestSuspend(Kernel::SuspendType::Debug); } - - // Signal an interrupt so that scheduler will fire. - system.Kernel().InterruptAllPhysicalCores(); } void ResumeEmulation(Kernel::KThread* except = nullptr) { @@ -253,7 +253,8 @@ private: template <typename Callback> void MarkResumed(Callback&& cb) { - std::scoped_lock lk{connection_lock}; + Kernel::KScopedSchedulerLock sl{system.Kernel()}; + std::scoped_lock cl{connection_lock}; stopped = false; cb(); } |