From 0011fa588cffe44fa05cb6007596e40d30c78484 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Tue, 31 Oct 2023 10:50:24 +0800 Subject: [PATCH] video: rockchip: rga3: destroy internal_buffer when user exits When a user imports the same buffer from multiple threads, relying only on put to reduce the reference count after the process exits will lead to memory leaks. Change-Id: I22e48eb89d23d0d1bc3066048235f1d58ba93511 Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/rga_mm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga_mm.c b/drivers/video/rockchip/rga3/rga_mm.c index 94b54d45af08..fb10f161c053 100644 --- a/drivers/video/rockchip/rga3/rga_mm.c +++ b/drivers/video/rockchip/rga3/rga_mm.c @@ -840,6 +840,11 @@ static int rga_mm_handle_remove(int id, void *ptr, void *data) return 0; } +static void rga_mm_buffer_destroy(struct rga_internal_buffer *buffer) +{ + rga_mm_kref_release_buffer(&buffer->refcount); +} + static struct rga_internal_buffer * rga_mm_lookup_external(struct rga_mm *mm_session, struct rga_external_buffer *external_buffer, @@ -2142,9 +2147,9 @@ int rga_mm_session_release_buffer(struct rga_session *session) idr_for_each_entry(&mm->memory_idr, buffer, i) { if (session == buffer->session) { - pr_err("[tgid:%d] Decrement the reference of handle[%d] when the user exits\n", + pr_err("[tgid:%d] Destroy handle[%d] when the user exits\n", session->tgid, buffer->handle); - kref_put(&buffer->refcount, rga_mm_kref_release_buffer); + rga_mm_buffer_destroy(buffer); } }