1 From 7e21d1e98be880d8552099b0f0b7c7332843a7a9 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Thu, 29 Oct 2020 20:00:59 +0100
4 Subject: drm/vc4: bo: Add a managed action to cleanup the cache
6 From: Maxime Ripard <maxime@cerno.tech>
8 [ Upstream commit 1c80be48c70a2198f7cf04a546b3805b92293ac6 ]
10 The BO cache needs to be cleaned up using vc4_bo_cache_destroy, but it's
11 not used consistently (vc4_drv's bind calls it in its error path, but
12 doesn't in unbind), and we can make that automatic through a managed
13 action. Let's remove the requirement to call vc4_bo_cache_destroy.
15 Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.")
16 Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
17 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
18 Link: https://patchwork.freedesktop.org/patch/msgid/20201029190104.2181730-1-maxime@cerno.tech
19 Signed-off-by: Sasha Levin <sashal@kernel.org>
21 drivers/gpu/drm/vc4/vc4_bo.c | 5 +++--
22 drivers/gpu/drm/vc4/vc4_drv.c | 1 -
23 drivers/gpu/drm/vc4/vc4_drv.h | 2 +-
24 3 files changed, 4 insertions(+), 4 deletions(-)
26 diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
27 index 74ceebd62fbce..073b528f33337 100644
28 --- a/drivers/gpu/drm/vc4/vc4_bo.c
29 +++ b/drivers/gpu/drm/vc4/vc4_bo.c
30 @@ -1005,6 +1005,7 @@ int vc4_get_tiling_ioctl(struct drm_device *dev, void *data,
34 +static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused);
35 int vc4_bo_cache_init(struct drm_device *dev)
37 struct vc4_dev *vc4 = to_vc4_dev(dev);
38 @@ -1033,10 +1034,10 @@ int vc4_bo_cache_init(struct drm_device *dev)
39 INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work);
40 timer_setup(&vc4->bo_cache.time_timer, vc4_bo_cache_time_timer, 0);
43 + return drmm_add_action_or_reset(dev, vc4_bo_cache_destroy, NULL);
46 -void vc4_bo_cache_destroy(struct drm_device *dev)
47 +static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused)
49 struct vc4_dev *vc4 = to_vc4_dev(dev);
51 diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
52 index f6995e7f6eb6e..c7aeaba3fabe8 100644
53 --- a/drivers/gpu/drm/vc4/vc4_drv.c
54 +++ b/drivers/gpu/drm/vc4/vc4_drv.c
55 @@ -311,7 +311,6 @@ unbind_all:
58 drm_mode_config_cleanup(drm);
59 - vc4_bo_cache_destroy(drm);
63 diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
64 index fa19160c801f8..528c28895a8e0 100644
65 --- a/drivers/gpu/drm/vc4/vc4_drv.h
66 +++ b/drivers/gpu/drm/vc4/vc4_drv.h
68 #include <drm/drm_device.h>
69 #include <drm/drm_encoder.h>
70 #include <drm/drm_gem_cma_helper.h>
71 +#include <drm/drm_managed.h>
72 #include <drm/drm_mm.h>
73 #include <drm/drm_modeset_lock.h>
75 @@ -786,7 +787,6 @@ struct drm_gem_object *vc4_prime_import_sg_table(struct drm_device *dev,
76 struct sg_table *sgt);
77 void *vc4_prime_vmap(struct drm_gem_object *obj);
78 int vc4_bo_cache_init(struct drm_device *dev);
79 -void vc4_bo_cache_destroy(struct drm_device *dev);
80 int vc4_bo_inc_usecnt(struct vc4_bo *bo);
81 void vc4_bo_dec_usecnt(struct vc4_bo *bo);
82 void vc4_bo_add_to_purgeable_pool(struct vc4_bo *bo);