Mesa (staging/20.1): radv/winsys: Deal with realloc failures in BO lists.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 24 13:49:10 UTC 2020


Module: Mesa
Branch: staging/20.1
Commit: 7a601f6b7b9454fc9b577d4cf9945a72d3cd8b70
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7a601f6b7b9454fc9b577d4cf9945a72d3cd8b70

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sat Jun 20 20:34:59 2020 +0200

radv/winsys: Deal with realloc failures in BO lists.

Otherwise if realloc fails we silently try to use it. Make recording fail instead.

CC: <mesa-stable at lists.freedesktop.org>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5578>
(cherry picked from commit 04765e6a9a43b831edd25a51a85e81f1390f36a8)

---

 .pick_status.json                             |  2 +-
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 13 ++++++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 6737e2e968b..114fe583ecd 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -40,7 +40,7 @@
         "description": "radv/winsys: Deal with realloc failures in BO lists.",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 87defbd698b..5e43bd08ad4 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -558,13 +558,20 @@ static void radv_amdgpu_cs_add_buffer_internal(struct radv_amdgpu_cs *cs,
 	unsigned hash;
 	int index = radv_amdgpu_cs_find_buffer(cs, bo);
 
-	if (index != -1)
+	if (index != -1 || cs->failed)
 		return;
 
 	if (cs->num_buffers == cs->max_num_buffers) {
 		unsigned new_count = MAX2(1, cs->max_num_buffers * 2);
-		cs->handles = realloc(cs->handles, new_count * sizeof(struct drm_amdgpu_bo_list_entry));
-		cs->max_num_buffers = new_count;
+		struct drm_amdgpu_bo_list_entry *new_entries =
+			realloc(cs->handles, new_count * sizeof(struct drm_amdgpu_bo_list_entry));
+		if (new_entries) {
+			cs->max_num_buffers = new_count;
+			cs->handles = new_entries;
+		} else {
+			cs->failed = true;
+			return;
+		}
 	}
 
 	cs->handles[cs->num_buffers].bo_handle = bo;



More information about the mesa-commit mailing list