From e0729f1ec5939d99371e2b69512817f4042aa40d Mon Sep 17 00:00:00 2001 From: DH Date: Sun, 1 Sep 2024 21:11:56 +0300 Subject: [PATCH] rpcsx-gpu: scheduler: fix race --- .../device/include/amdgpu/device/gpu-scheduler.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/amdgpu/device/include/amdgpu/device/gpu-scheduler.hpp b/hw/amdgpu/device/include/amdgpu/device/gpu-scheduler.hpp index a080369ea..efe3eb39f 100644 --- a/hw/amdgpu/device/include/amdgpu/device/gpu-scheduler.hpp +++ b/hw/amdgpu/device/include/amdgpu/device/gpu-scheduler.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -203,8 +204,8 @@ struct TaskChain { class GpuScheduler { std::list workThreads; - std::vector tasks; - std::vector delayedTasks; + std::deque tasks; + std::deque delayedTasks; std::mutex taskMtx; std::condition_variable taskCv; std::atomic exit{false}; @@ -339,14 +340,14 @@ private: } } - task = std::move(tasks.back()); - tasks.pop_back(); + task = std::move(tasks.front()); + tasks.pop_front(); } if (task.waitId != GpuTaskLayout::kInvalidId && !task.chain->isComplete(task.waitId)) { std::unique_lock lock(taskMtx); - delayedTasks.push_back(std::move(task)); + delayedTasks.push_front(std::move(task)); taskCv.notify_one(); continue; }