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:
@@ -34,3 +34,17 @@ panfrost_bo_cache_fetch(
|
|||||||
/* Stub */
|
/* Stub */
|
||||||
return NULL;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -134,7 +134,7 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
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 };
|
struct drm_gem_close gem_close = { .handle = bo->gem_handle };
|
||||||
int ret;
|
int ret;
|
||||||
@@ -142,6 +142,18 @@ panfrost_drm_release_bo(struct panfrost_screen *screen, struct panfrost_bo *bo)
|
|||||||
if (!bo)
|
if (!bo)
|
||||||
return;
|
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);
|
panfrost_drm_munmap_bo(screen, bo);
|
||||||
|
|
||||||
ret = drmIoctl(screen->fd, DRM_IOCTL_GEM_CLOSE, &gem_close);
|
ret = drmIoctl(screen->fd, DRM_IOCTL_GEM_CLOSE, &gem_close);
|
||||||
|
@@ -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 */
|
/* When the reference count goes to zero, we need to cleanup */
|
||||||
|
|
||||||
if (pipe_reference(&bo->reference, NULL))
|
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
|
static void
|
||||||
|
@@ -137,7 +137,7 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
|
|||||||
void
|
void
|
||||||
panfrost_drm_mmap_bo(struct panfrost_screen *screen, struct panfrost_bo *bo);
|
panfrost_drm_mmap_bo(struct panfrost_screen *screen, struct panfrost_bo *bo);
|
||||||
void
|
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 *
|
struct panfrost_bo *
|
||||||
panfrost_drm_import_bo(struct panfrost_screen *screen, int fd);
|
panfrost_drm_import_bo(struct panfrost_screen *screen, int fd);
|
||||||
int
|
int
|
||||||
@@ -166,5 +166,10 @@ panfrost_bo_cache_fetch(
|
|||||||
struct panfrost_screen *screen,
|
struct panfrost_screen *screen,
|
||||||
size_t size, uint32_t flags);
|
size_t size, uint32_t flags);
|
||||||
|
|
||||||
|
bool
|
||||||
|
panfrost_bo_cache_put(
|
||||||
|
struct panfrost_screen *screen,
|
||||||
|
struct panfrost_bo *bo);
|
||||||
|
|
||||||
|
|
||||||
#endif /* PAN_SCREEN_H */
|
#endif /* PAN_SCREEN_H */
|
||||||
|
Reference in New Issue
Block a user