From 8459995eefc53c90e0d597f8de9b7a5e326e63f3 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Thu, 26 Jan 2023 19:08:14 +0100 Subject: [PATCH] etnaviv: drm: fix check if BO is on a deferred destroy list list_is_linked() isn't the right function to use in order to check if the BO is on a cache bucket or the zombie list, as this checks if the next pointer of the list isn't NULL. This is always the case with the BO list item as it's always initialized, so the next pointer points to the list head itself when the BO isn't on any list. Use list_is_empty() to check if the BO is actually linked into one of the deferred destroy lists. Fixes: 1b1f8592c03c ("etnaviv: drm: properly handle reviving BOs via a lookup") Signed-off-by: Lucas Stach Reviewed-by: Christian Gmeiner Part-of: (cherry picked from commit 196882a1477a69ba1593db8bdaaf6726fe914fca) --- .pick_status.json | 2 +- src/etnaviv/drm/etnaviv_bo.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index f2101cc..51e0b3c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4486,7 +4486,7 @@ "description": "etnaviv: drm: fix check if BO is on a deferred destroy list", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "1b1f8592c03c7e98b7baf89cb4d012bb7af546ac" }, diff --git a/src/etnaviv/drm/etnaviv_bo.c b/src/etnaviv/drm/etnaviv_bo.c index d790823..aae81a0 100644 --- a/src/etnaviv/drm/etnaviv_bo.c +++ b/src/etnaviv/drm/etnaviv_bo.c @@ -138,8 +138,8 @@ static struct etna_bo *lookup_bo(void *tbl, uint32_t handle) /* found, incr refcnt and return: */ bo = etna_bo_ref(entry->data); - /* don't break the bucket if this bo was found in one */ - if (list_is_linked(&bo->list)) { + /* don't break the bucket/zombie list if this bo was found in one */ + if (!list_is_empty(&bo->list)) { VG_BO_OBTAIN(bo); etna_device_ref(bo->dev); list_delinit(&bo->list); -- 2.7.4