panfrost: Stub out panfrost_bo_cache_put

..so we can intercept the BO free.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig
2019-07-15 08:19:53 -07:00
parent b5a28f61ae
commit 74ad5f89f8
4 changed files with 34 additions and 3 deletions

View File

@@ -34,3 +34,17 @@ panfrost_bo_cache_fetch(
/* Stub */
return NULL;
}
/* Tries to add a BO to the cache. Returns if it was
* successful */
bool
panfrost_bo_cache_put(
struct panfrost_screen *screen,
struct panfrost_bo *bo)
{
/* Stub */
return false;
}

View File

@@ -134,7 +134,7 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
}
void
panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo)
panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo, bool cacheable)
{
struct drm_gem_close gem_close = { .handle = bo->gem_handle };
int ret;
@@ -142,6 +142,18 @@ panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo)
if (!bo)
return;
/* Rather than freeing the BO now, we'll cache the BO for later
* allocations if we're allowed to */
if (cacheable) {
bool cached = panfrost_bo_cache_put(screen, bo);
if (cached)
return;
}
/* Otherwise, if the BO wasn't cached, we'll legitimately free the BO */
panfrost_drm_munmap_bo(screen, bo);
ret = drmIoctl(screen->fd, DRM_IOCTL_GEM_CLOSE, &gem_close);

View File

@@ -445,7 +445,7 @@ panfrost_bo_unreference(struct pipe_screen *screen, struct panfrost_bo *bo)
/* When the reference count goes to zero, we need to cleanup */
if (pipe_reference(&bo->reference, NULL))
panfrost_drm_release_bo(pan_screen(screen), bo);
panfrost_drm_release_bo(pan_screen(screen), bo, true);
}
static void

View File

@@ -137,7 +137,7 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
void
panfrost_drm_mmap_bo(struct panfrost_screen *screen, struct panfrost_bo *bo);
void
panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo);
panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo, bool cacheable);
struct panfrost_bo *
panfrost_drm_import_bo(struct panfrost_screen *screen, int fd);
int
@@ -166,5 +166,10 @@ panfrost_bo_cache_fetch(
struct panfrost_screen *screen,
size_t size, uint32_t flags);
bool
panfrost_bo_cache_put(
struct panfrost_screen *screen,
struct panfrost_bo *bo);
#endif /* PAN_SCREEN_H */