From 2d094ea88b4811d9cda6fe44d37eea2993fbdd81 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Mon, 29 Apr 2024 11:33:21 +0800 Subject: [PATCH] video: rockchip: rga3: fix request cannot be released after job_alloc failed Signed-off-by: Yu Qiaowei Change-Id: I9560e1ea2d5edbee2dbfa7adb95e7fa9680e9fda --- drivers/video/rockchip/rga3/rga_job.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index 05a3f5cb2b83..fc90e7cf9ca3 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -626,7 +626,7 @@ static int rga_request_scheduler_job_abort(struct rga_request *request) int i; unsigned long flags; enum rga_scheduler_status scheduler_status; - int running_abort_count = 0, todo_abort_count = 0; + int running_abort_count = 0, todo_abort_count = 0, all_task_count = 0; struct rga_scheduler_t *scheduler = NULL; struct rga_job *job, *job_q; LIST_HEAD(list_to_free); @@ -679,8 +679,12 @@ static int rga_request_scheduler_job_abort(struct rga_request *request) rga_job_cleanup(job); } + all_task_count = request->finished_task_count + request->failed_task_count + + running_abort_count + todo_abort_count; + /* This means it has been cleaned up. */ - if (running_abort_count + todo_abort_count == 0) + if (running_abort_count + todo_abort_count == 0 && + all_task_count == request->task_count) return 1; pr_err("request[%d] abort! finished %d failed %d running_abort %d todo_abort %d\n",