Commit 1c80be48 authored by Maxime Ripard's avatar Maxime Ripard

drm/vc4: bo: Add a managed action to cleanup the cache

The BO cache needs to be cleaned up using vc4_bo_cache_destroy, but it's
not used consistently (vc4_drv's bind calls it in its error path, but
doesn't in unbind), and we can make that automatic through a managed
action. Let's remove the requirement to call vc4_bo_cache_destroy.

Fixes: c826a6e1 ("drm/vc4: Add a BO cache.")
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20201029190104.2181730-1-maxime@cerno.tech
parent 3cea11cd
...@@ -1005,6 +1005,7 @@ int vc4_get_tiling_ioctl(struct drm_device *dev, void *data, ...@@ -1005,6 +1005,7 @@ int vc4_get_tiling_ioctl(struct drm_device *dev, void *data,
return 0; return 0;
} }
static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused);
int vc4_bo_cache_init(struct drm_device *dev) int vc4_bo_cache_init(struct drm_device *dev)
{ {
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
...@@ -1033,10 +1034,10 @@ int vc4_bo_cache_init(struct drm_device *dev) ...@@ -1033,10 +1034,10 @@ int vc4_bo_cache_init(struct drm_device *dev)
INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work); INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work);
timer_setup(&vc4->bo_cache.time_timer, vc4_bo_cache_time_timer, 0); timer_setup(&vc4->bo_cache.time_timer, vc4_bo_cache_time_timer, 0);
return 0; return drmm_add_action_or_reset(dev, vc4_bo_cache_destroy, NULL);
} }
void vc4_bo_cache_destroy(struct drm_device *dev) static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused)
{ {
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
int i; int i;
......
...@@ -315,7 +315,6 @@ static int vc4_drm_bind(struct device *dev) ...@@ -315,7 +315,6 @@ static int vc4_drm_bind(struct device *dev)
gem_destroy: gem_destroy:
vc4_gem_destroy(drm); vc4_gem_destroy(drm);
drm_mode_config_cleanup(drm); drm_mode_config_cleanup(drm);
vc4_bo_cache_destroy(drm);
dev_put: dev_put:
drm_dev_put(drm); drm_dev_put(drm);
return ret; return ret;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <drm/drm_device.h> #include <drm/drm_device.h>
#include <drm/drm_encoder.h> #include <drm/drm_encoder.h>
#include <drm/drm_gem_cma_helper.h> #include <drm/drm_gem_cma_helper.h>
#include <drm/drm_managed.h>
#include <drm/drm_mm.h> #include <drm/drm_mm.h>
#include <drm/drm_modeset_lock.h> #include <drm/drm_modeset_lock.h>
...@@ -809,7 +810,6 @@ struct drm_gem_object *vc4_prime_import_sg_table(struct drm_device *dev, ...@@ -809,7 +810,6 @@ struct drm_gem_object *vc4_prime_import_sg_table(struct drm_device *dev,
struct sg_table *sgt); struct sg_table *sgt);
void *vc4_prime_vmap(struct drm_gem_object *obj); void *vc4_prime_vmap(struct drm_gem_object *obj);
int vc4_bo_cache_init(struct drm_device *dev); int vc4_bo_cache_init(struct drm_device *dev);
void vc4_bo_cache_destroy(struct drm_device *dev);
int vc4_bo_inc_usecnt(struct vc4_bo *bo); int vc4_bo_inc_usecnt(struct vc4_bo *bo);
void vc4_bo_dec_usecnt(struct vc4_bo *bo); void vc4_bo_dec_usecnt(struct vc4_bo *bo);
void vc4_bo_add_to_purgeable_pool(struct vc4_bo *bo); void vc4_bo_add_to_purgeable_pool(struct vc4_bo *bo);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment