From 00273aa75b5e799ba3d10ba1b643f7ab2d173002 Mon Sep 17 00:00:00 2001 From: DH Date: Thu, 14 Nov 2024 02:03:39 +0300 Subject: [PATCH] orbis-kernel: allow umtx_cv_wait with abs time workaround for wrong blockpool protection --- orbis-kernel/src/umtx.cpp | 11 +++-------- rpcsx/iodev/blockpool.cpp | 5 +++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/orbis-kernel/src/umtx.cpp b/orbis-kernel/src/umtx.cpp index 5f9ffa3e5..efd3e857e 100644 --- a/orbis-kernel/src/umtx.cpp +++ b/orbis-kernel/src/umtx.cpp @@ -320,15 +320,13 @@ orbis::ErrorCode orbis::umtx_cv_wait(Thread *thread, ptr cv, ORBIS_LOG_FATAL("umtx_cv_wait: UNKNOWN wflags", wflags); return ErrorCode::INVAL; } - if ((wflags & kCvWaitClockId) != 0 && ut + 1 && cv->clockid != 0) { + if ((wflags & kCvWaitClockId) != 0 && ut + 1) { ORBIS_LOG_WARNING("umtx_cv_wait: CLOCK_ID", wflags, cv->clockid); - // std::abort(); - return ErrorCode::NOSYS; } if ((wflags & kCvWaitAbsTime) != 0 && ut + 1) { - ORBIS_LOG_WARNING("umtx_cv_wait: ABSTIME unimplemented", wflags); + ORBIS_LOG_WARNING("umtx_cv_wait: ABSTIME", wflags); auto now = std::chrono::time_point_cast( - std::chrono::high_resolution_clock::now()) + std::chrono::steady_clock::now()) .time_since_epoch() .count(); @@ -337,9 +335,6 @@ orbis::ErrorCode orbis::umtx_cv_wait(Thread *thread, ptr cv, } else { ut = ut - now; } - - std::abort(); - return ErrorCode::NOSYS; } auto [chain, key, lock] = g_context.getUmtxChain0(thread, cv->flags, cv); diff --git a/rpcsx/iodev/blockpool.cpp b/rpcsx/iodev/blockpool.cpp index 37f5a8ce3..fb66eaf73 100644 --- a/rpcsx/iodev/blockpool.cpp +++ b/rpcsx/iodev/blockpool.cpp @@ -113,6 +113,11 @@ orbis::ErrorCode BlockPoolDevice::map(void **address, std::uint64_t len, std::int32_t prot, std::int32_t flags, orbis::Thread *thread) { ORBIS_LOG_FATAL("blockpool device map", *address, len); + if (prot == 0) { + // FIXME: investigate it + prot = 0x33; + } + auto result = vm::map(*address, len, prot, flags); if (result == (void *)-1) {