mirror of https://gitlab.freedesktop.org/mesa/mesa
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 <alyssa@collabora.com> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10794>
This commit is contained in:
parent
22a750465d
commit
77d0498913
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue