From d680f5a499542c4d0e67745de3ba3355a4abb477 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Fri, 27 Mar 2026 11:27:26 +0000 Subject: [PATCH] [Kernel] Fixed XTimer reporting resume support Fixed Quake 4 performance issues --- src/xenia/kernel/xboxkrnl/xboxkrnl_threading.cc | 4 ++++ src/xenia/kernel/xtimer.cc | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_threading.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_threading.cc index 3a4cb2423..593a00e9c 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_threading.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_threading.cc @@ -899,6 +899,10 @@ dword_result_t NtSetTimerEx_entry(dword_t timer_handle, lpqword_t due_time_ptr, assert_true(mode == 1); assert_true(!unk_zero); + if (unk_zero) { + XELOGI("NtSetTimerEx: unk_zero is set!"); + } + uint64_t due_time = *due_time_ptr; X_STATUS result = X_STATUS_SUCCESS; diff --git a/src/xenia/kernel/xtimer.cc b/src/xenia/kernel/xtimer.cc index c1b806b1e..22732f074 100644 --- a/src/xenia/kernel/xtimer.cc +++ b/src/xenia/kernel/xtimer.cc @@ -40,10 +40,6 @@ X_STATUS XTimer::SetTimer(int64_t due_time, uint32_t period_ms, uint32_t routine, uint32_t routine_arg, bool resume) { using xe::chrono::WinSystemClock; using xe::chrono::XSystemClock; - // Caller is checking for STATUS_TIMER_RESUME_IGNORED. - if (resume) { - return X_STATUS_TIMER_RESUME_IGNORED; - } std::lock_guard lock(timer_lock_); @@ -92,6 +88,11 @@ X_STATUS XTimer::SetTimer(int64_t due_time, uint32_t period_ms, due_tp, std::chrono::milliseconds(period_ms), std::move(callback)); } + if (resume) { + XThread::SetLastError(X_ERROR_NOT_SUPPORTED); + return X_STATUS_TIMER_RESUME_IGNORED; + } + return result ? X_STATUS_SUCCESS : X_STATUS_UNSUCCESSFUL; }