freedreno/drm: Fix zombie BO import harder

Fixes: 6ac133c646 ("freedreno/drm: Fix race in zombie import")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26506>
(cherry picked from commit f2e3285d8e)
This commit is contained in:
Rob Clark
2023-12-04 09:06:59 -08:00
committed by Eric Engestrom
parent ae6c9315a8
commit 10a47cde73
2 changed files with 10 additions and 1 deletions

View File

@@ -404,7 +404,7 @@
"description": "freedreno/drm: Fix zombie BO import harder",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "6ac133c646dd4f6f9d8f644b24da6aeae95c1ce3",
"notes": null

View File

@@ -64,6 +64,15 @@ lookup_bo(struct hash_table *tbl, uint32_t key)
* checking for refcnt==0 (ie. 1 after p_atomic_inc_return).
*/
if (p_atomic_inc_return(&bo->refcnt) == 1) {
/* Restore the zombified reference count, so if another thread
* that ends up calling lookup_bo() gets the table_lock before
* the thread deleting the bo does, it doesn't mistakenly see
* that the BO is live.
*
* We are holding the table_lock here so we can't be racing
* with another caller of lookup_bo()
*/
p_atomic_dec(&bo->refcnt);
return &zombie;
}