From 3fbc59cce165cf3532217e59dbeb2de69cf47abd Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Wed, 28 May 2025 10:48:42 -0700 Subject: [PATCH] kern: wait 100us after synchronizing cores before saving interrupt state on sleep --- .../source/board/nintendo/nx/kern_k_sleep_manager.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/libmesosphere/source/board/nintendo/nx/kern_k_sleep_manager.cpp b/libraries/libmesosphere/source/board/nintendo/nx/kern_k_sleep_manager.cpp index 5e5983c86..59e7770ea 100644 --- a/libraries/libmesosphere/source/board/nintendo/nx/kern_k_sleep_manager.cpp +++ b/libraries/libmesosphere/source/board/nintendo/nx/kern_k_sleep_manager.cpp @@ -524,6 +524,14 @@ namespace ams::kern::board::nintendo::nx { /* Ensure that all cores get to this point before continuing. */ cpu::SynchronizeAllCores(); + /* Wait 100us before continuing. */ + { + const s64 timeout = KHardwareTimer::GetTick() + ams::svc::Tick(TimeSpan::FromMicroSeconds(100)); + while (KHardwareTimer::GetTick() < timeout) { + __asm__ __volatile__("" ::: "memory"); + } + } + /* Save the interrupt manager's state. */ Kernel::GetInterruptManager().Save(core_id);