Mesa (staging/21.1): clover/memory: fix data race in buffer subclasses
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue May 11 20:51:07 UTC 2021
Module: Mesa
Branch: staging/21.1
Commit: 8a6b1a7ff2889b0be3f8352c009a14c63d9993a5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8a6b1a7ff2889b0be3f8352c009a14c63d9993a5
Author: Karol Herbst <kherbst at 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 <kherbst at redhat.com>
Reviewed-by: Zoltán Böszörményi <zboszor at gmail.com>
Reviewed-by: Pierre Moreau <dev at 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 cbeccdc8cc9..440e9130f97 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 {
More information about the mesa-commit
mailing list