From 808a95d24a42f7676b9241685287199a55d3f39c Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Mon, 10 Apr 2023 14:18:56 -0700 Subject: [PATCH] iris/bufmgr: Add and use zero_bo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This simplifies the next patch. Cc: mesa-stable Reviewed-by: José Roberto de Souza Part-of: (cherry picked from commit 215fbbb6049bf6dd2f1b6fda4ab7b111b6c81436) --- .pick_status.json | 2 +- src/gallium/drivers/iris/iris_bufmgr.c | 37 +++++++++++++++----------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 65bc4bdbac5..f4e3d647709 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -499,7 +499,7 @@ "description": "iris/bufmgr: Add and use zero_bo", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index d49788a1bcb..f5ff1984391 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -787,6 +787,21 @@ flags_to_heap(struct iris_bufmgr *bufmgr, unsigned flags) } } +static bool +zero_bo(struct iris_bufmgr *bufmgr, + unsigned flags, + struct iris_bo *bo) +{ + assert(flags & BO_ALLOC_ZEROED); + + void *map = iris_bo_map(NULL, bo, MAP_WRITE | MAP_RAW); + if (!map) + return false; + + memset(map, 0, bo->size); + return true; +} + static struct iris_bo * alloc_bo_from_slabs(struct iris_bufmgr *bufmgr, const char *name, @@ -863,14 +878,9 @@ alloc_bo_from_slabs(struct iris_bufmgr *bufmgr, /* Zero the contents if necessary. If this fails, fall back to * allocating a fresh BO, which will always be zeroed by the kernel. */ - if (flags & BO_ALLOC_ZEROED) { - void *map = iris_bo_map(NULL, bo, MAP_WRITE | MAP_RAW); - if (map) { - memset(map, 0, bo->size); - } else { - pb_slab_free(slabs, &bo->slab.entry); - return NULL; - } + if ((flags & BO_ALLOC_ZEROED) && !zero_bo(bufmgr, flags, bo)) { + pb_slab_free(slabs, &bo->slab.entry); + return NULL; } return bo; @@ -960,14 +970,9 @@ alloc_bo_from_cache(struct iris_bufmgr *bufmgr, /* Zero the contents if necessary. If this fails, fall back to * allocating a fresh BO, which will always be zeroed by the kernel. */ - if (flags & BO_ALLOC_ZEROED) { - void *map = iris_bo_map(NULL, bo, MAP_WRITE | MAP_RAW); - if (map) { - memset(map, 0, bo->size); - } else { - bo_free(bo); - return NULL; - } + if ((flags & BO_ALLOC_ZEROED) && !zero_bo(bufmgr, flags, bo)) { + bo_free(bo); + return NULL; } return bo;