Module: Mesa Branch: staging/21.1 Commit: b6c9f39bc0c2a27fa5c8db6503fe40e1fa4e32b1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6c9f39bc0c2a27fa5c8db6503fe40e1fa4e32b1
Author: Alyssa Rosenzweig <[email protected]> Date: Thu May 13 17:24:31 2021 -0400 panfrost: Fix major flaw in BO cache BOs in the cache are chronological, so we try oldest BOs first. That means if we find the oldest BO is busy, likely every BO is busy, and we should bail early. This dramatically reduces the useless cycles spent in bo_wait. I studied the BO cache of the following drivers, all of which handle this correctly: iris, lima, etnaviv, freedreno, vc4, v3d, v3dv. Signed-off-by: Alyssa Rosenzweig <[email protected]> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10794> (cherry picked from commit 77d04989135233c7b276bca3912ab07a12d9f362) --- .pick_status.json | 2 +- src/panfrost/lib/pan_bo.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index e7d76c25baf..062f79d942b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -13,7 +13,7 @@ "description": "panfrost: Fix major flaw in BO cache", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/panfrost/lib/pan_bo.c b/src/panfrost/lib/pan_bo.c index dbfce02e519..8e9e257a812 100644 --- a/src/panfrost/lib/pan_bo.c +++ b/src/panfrost/lib/pan_bo.c @@ -201,9 +201,11 @@ panfrost_bo_cache_fetch(struct panfrost_device *dev, if (entry->size < size || entry->flags != flags) continue; + /* If the oldest BO in the cache is busy, likely so is + * everything newer, so bail. */ if (!panfrost_bo_wait(entry, dontwait ? 0 : INT64_MAX, PAN_BO_ACCESS_RW)) - continue; + break; struct drm_panfrost_madvise madv = { .handle = entry->gem_handle, _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
