Module: Mesa Branch: staging/21.0 Commit: b76ca14afed4952e995ce74858da2d4f77ea4f89 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b76ca14afed4952e995ce74858da2d4f77ea4f89
Author: Karol Herbst <[email protected]> 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 <[email protected]> Reviewed-by: Zoltán Böszörményi <[email protected]> Reviewed-by: Pierre Moreau <[email protected]> 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 e8c756fb884..091d8e2b378 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3352,7 +3352,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 7e2a3b921e0..183d48b235b 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 2f827b9044d..a056b6397a2 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 image2d : public image { _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
