panfrost: Don't return imported/exported BOs to the cache
We don't know who else is using the BO in that case, and thus shouldn't re-use it for something else. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
@@ -182,6 +182,9 @@ panfrost_bo_cache_put(struct panfrost_bo *bo)
|
|||||||
{
|
{
|
||||||
struct panfrost_screen *screen = bo->screen;
|
struct panfrost_screen *screen = bo->screen;
|
||||||
|
|
||||||
|
if (bo->flags & PAN_BO_DONT_REUSE)
|
||||||
|
return false;
|
||||||
|
|
||||||
pthread_mutex_lock(&screen->bo_cache_lock);
|
pthread_mutex_lock(&screen->bo_cache_lock);
|
||||||
struct list_head *bucket = pan_bucket(screen, bo->size);
|
struct list_head *bucket = pan_bucket(screen, bo->size);
|
||||||
struct drm_panfrost_madvise madv;
|
struct drm_panfrost_madvise madv;
|
||||||
@@ -352,6 +355,7 @@ panfrost_bo_import(struct panfrost_screen *screen, int fd)
|
|||||||
bo->gem_handle = gem_handle;
|
bo->gem_handle = gem_handle;
|
||||||
bo->gpu = (mali_ptr) get_bo_offset.offset;
|
bo->gpu = (mali_ptr) get_bo_offset.offset;
|
||||||
bo->size = lseek(fd, 0, SEEK_END);
|
bo->size = lseek(fd, 0, SEEK_END);
|
||||||
|
bo->flags |= PAN_BO_DONT_REUSE;
|
||||||
assert(bo->size > 0);
|
assert(bo->size > 0);
|
||||||
pipe_reference_init(&bo->reference, 1);
|
pipe_reference_init(&bo->reference, 1);
|
||||||
|
|
||||||
@@ -372,6 +376,7 @@ panfrost_bo_export(struct panfrost_bo *bo)
|
|||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
bo->flags |= PAN_BO_DONT_REUSE;
|
||||||
return args.fd;
|
return args.fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ struct panfrost_screen;
|
|||||||
* (semantically distinct from INVISIBLE, which cannot never be mmaped) */
|
* (semantically distinct from INVISIBLE, which cannot never be mmaped) */
|
||||||
#define PAN_BO_DELAY_MMAP (1 << 4)
|
#define PAN_BO_DELAY_MMAP (1 << 4)
|
||||||
|
|
||||||
|
/* Some BOs shouldn't be returned back to the reuse BO cache, use this flag to
|
||||||
|
* let the BO logic know about this contraint. */
|
||||||
|
#define PAN_BO_DONT_REUSE (1 << 5)
|
||||||
|
|
||||||
struct panfrost_bo {
|
struct panfrost_bo {
|
||||||
/* Must be first for casting */
|
/* Must be first for casting */
|
||||||
struct list_head link;
|
struct list_head link;
|
||||||
|
|||||||
Reference in New Issue
Block a user