diff --git a/src/core/kernel/exports/EmuKrnl.h b/src/core/kernel/exports/EmuKrnl.h index 0b8a691d3..a86a8633f 100644 --- a/src/core/kernel/exports/EmuKrnl.h +++ b/src/core/kernel/exports/EmuKrnl.h @@ -52,8 +52,6 @@ xbox::PLIST_ENTRY RemoveTailList(xbox::PLIST_ENTRY pListHead); extern xbox::LAUNCH_DATA_PAGE DefaultLaunchDataPage; extern xbox::PKINTERRUPT EmuInterruptList[MAX_BUS_INTERRUPT_LEVEL + 1]; -inline std::condition_variable g_InterruptSignal; -inline std::atomic_bool g_AnyInterruptAsserted = false; class HalSystemInterrupt { public: @@ -64,8 +62,6 @@ public: } m_Asserted = state; - g_AnyInterruptAsserted = true; - g_InterruptSignal.notify_one(); }; void Enable() { diff --git a/src/core/kernel/init/CxbxKrnl.cpp b/src/core/kernel/init/CxbxKrnl.cpp index d0447f83b..ac40986b4 100644 --- a/src/core/kernel/init/CxbxKrnl.cpp +++ b/src/core/kernel/init/CxbxKrnl.cpp @@ -337,17 +337,14 @@ static xbox::void_xt NTAPI CxbxKrnlInterruptThread(xbox::PVOID param) InitSoftwareInterrupts(); #endif - std::mutex m; - std::unique_lock lock(m); while (true) { for (int i = 0; i < MAX_BUS_INTERRUPT_LEVEL; i++) { // If the interrupt is pending and connected, process it - if (HalSystemInterrupts[i].IsPending() && EmuInterruptList[i] && EmuInterruptList[i]->Connected) { + if (g_bEnableAllInterrupts && HalSystemInterrupts[i].IsPending() && EmuInterruptList[i] && EmuInterruptList[i]->Connected) { HalSystemInterrupts[i].Trigger(EmuInterruptList[i]); } } - g_InterruptSignal.wait(lock, []() { return g_AnyInterruptAsserted.load() && g_bEnableAllInterrupts.load(); }); - g_AnyInterruptAsserted = false; + _mm_pause(); } assert(0);