From 745b0c45e0782ab7922fe39f65036a759aca3571 Mon Sep 17 00:00:00 2001 From: DH Date: Thu, 20 Mar 2025 22:05:26 +0300 Subject: [PATCH] android: thread: fix affinity mask --- rpcs3/Utilities/Thread.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rpcs3/Utilities/Thread.cpp b/rpcs3/Utilities/Thread.cpp index 53b3347cb..34e95b438 100644 --- a/rpcs3/Utilities/Thread.cpp +++ b/rpcs3/Utilities/Thread.cpp @@ -2944,7 +2944,8 @@ u64 thread_ctrl::get_affinity_mask(thread_class group) { #ifdef ANDROID u64 mask = 0; - thread_class affinities[] = { + thread_class affinities[] = + { g_cfg.core.affinity.cpu0.get(), g_cfg.core.affinity.cpu1.get(), g_cfg.core.affinity.cpu2.get(), @@ -2955,12 +2956,19 @@ u64 thread_ctrl::get_affinity_mask(thread_class group) g_cfg.core.affinity.cpu7.get() }; - for (std::size_t i = 0; i < std::size(affinities); ++i) { - if (affinities[i] == group || affinities[i] == thread_class::general) { - mask |= 1ull < i; + for (std::size_t i = 0; i < std::min(std::thread::hardware_concurrency(), std::size(affinities)); ++i) + { + if (affinities[i] == group || affinities[i] == thread_class::general) + { + mask |= 1ull << i; } } + for (std::size_t i = std::size(affinities); i < std::thread::hardware_concurrency(); ++i) + { + mask |= 1ull << i; + } + return mask; #endif