Module: Mesa Branch: staging/21.1 Commit: 1e2245b154030782c702eee8204175b26f965732 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e2245b154030782c702eee8204175b26f965732
Author: Karol Herbst <kher...@redhat.com> Date: Wed Jan 27 22:09:16 2021 +0100 clover/memory: fix data race in buffer subclasses Cc: mesa-stable Signed-off-by: Karol Herbst <kher...@redhat.com> Reviewed-by: Zoltán Böszörményi <zbos...@gmail.com> Reviewed-by: Pierre Moreau <d...@pmoreau.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8765> (cherry picked from commit 98280e834873a0f8711aa489a2a4e256a25566d0) --- .pick_status.json | 2 +- src/gallium/frontends/clover/core/memory.cpp | 6 ++++++ src/gallium/frontends/clover/core/memory.hpp | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 1879feea646..e705027c71f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -445,7 +445,7 @@ "description": "clover/memory: fix data race in buffer subclasses", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/gallium/frontends/clover/core/memory.cpp b/src/gallium/frontends/clover/core/memory.cpp index 54b9be7d147..e722af22b50 100644 --- a/src/gallium/frontends/clover/core/memory.cpp +++ b/src/gallium/frontends/clover/core/memory.cpp @@ -108,6 +108,7 @@ root_buffer::resource_undef(command_queue &q) { resource & root_buffer::resource(command_queue &q, const void *data_ptr) { + std::lock_guard<std::mutex> lock(resources_mtx); // Create a new resource if there's none for this device yet. if (!resources.count(&q.device())) { auto r = (!resources.empty() ? @@ -125,6 +126,7 @@ root_buffer::resource(command_queue &q, const void *data_ptr) { void root_buffer::resource_out(command_queue &q) { + std::lock_guard<std::mutex> lock(resources_mtx); resources.erase(&q.device()); } @@ -137,6 +139,7 @@ sub_buffer::sub_buffer(root_buffer &parent, cl_mem_flags flags, resource & sub_buffer::resource_in(command_queue &q) { + std::lock_guard<std::mutex> lock(resources_mtx); // Create a new resource if there's none for this device yet. if (!resources.count(&q.device())) { auto r = new sub_resource(parent().resource_in(q), {{ offset() }}); @@ -155,6 +158,7 @@ sub_buffer::resource_undef(command_queue &q) { void sub_buffer::resource_out(command_queue &q) { + std::lock_guard<std::mutex> lock(resources_mtx); resources.erase(&q.device()); } @@ -188,6 +192,7 @@ image::resource_undef(command_queue &q) { resource & image::resource(command_queue &q, const void *data_ptr) { + std::lock_guard<std::mutex> lock(resources_mtx); // Create a new resource if there's none for this device yet. if (!resources.count(&q.device())) { auto r = (!resources.empty() ? @@ -205,6 +210,7 @@ image::resource(command_queue &q, const void *data_ptr) { void image::resource_out(command_queue &q) { + std::lock_guard<std::mutex> lock(resources_mtx); resources.erase(&q.device()); } diff --git a/src/gallium/frontends/clover/core/memory.hpp b/src/gallium/frontends/clover/core/memory.hpp index 284e86d7edc..19d6e2ad45f 100644 --- a/src/gallium/frontends/clover/core/memory.hpp +++ b/src/gallium/frontends/clover/core/memory.hpp @@ -107,6 +107,7 @@ namespace clover { std::map<device *, std::unique_ptr<root_resource>> resources; + std::mutex resources_mtx; }; class sub_buffer : public buffer { @@ -128,6 +129,7 @@ namespace clover { size_t _offset; std::map<device *, std::unique_ptr<sub_resource>> resources; + std::mutex resources_mtx; }; class image : public memory_obj { @@ -167,6 +169,7 @@ namespace clover { size_t _slice_pitch; std::map<device *, std::unique_ptr<root_resource>> resources; + std::mutex resources_mtx; }; class image1d : public image { _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit