From b0cac0a410e48dcfd806dcbf9521707dbc170d21 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Thu, 15 Aug 2024 16:29:13 +0800 Subject: [PATCH] video: rockchip: rga3: "load" node supports querying session active status Signed-off-by: Yu Qiaowei Change-Id: If875c401015baf6f34172c3c10a61b603df345ae --- drivers/video/rockchip/rga3/include/rga_drv.h | 3 +++ drivers/video/rockchip/rga3/rga2_reg_info.c | 1 + drivers/video/rockchip/rga3/rga3_reg_info.c | 1 + drivers/video/rockchip/rga3/rga_debugger.c | 14 +++++++++++--- drivers/video/rockchip/rga3/rga_drv.c | 2 ++ drivers/video/rockchip/rga3/rga_job.c | 2 ++ 6 files changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/video/rockchip/rga3/include/rga_drv.h b/drivers/video/rockchip/rga3/include/rga_drv.h index 2ef48e8c469a..948247bacf8a 100644 --- a/drivers/video/rockchip/rga3/include/rga_drv.h +++ b/drivers/video/rockchip/rga3/include/rga_drv.h @@ -69,6 +69,7 @@ /* load interval: 1000ms */ #define RGA_LOAD_INTERVAL_US 1000000 +#define RGA_LOAD_ACTIVE_MAX_US 5000000 /* timer interval: 1000ms */ #define RGA_TIMER_INTERVAL_NS 1000000000 @@ -236,6 +237,8 @@ struct rga_session { pid_t tgid; char *pname; + + ktime_t last_active; }; struct rga_job_buffer { diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c index 9a16eb14faca..05138cf4c83e 100644 --- a/drivers/video/rockchip/rga3/rga2_reg_info.c +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c @@ -3057,6 +3057,7 @@ static int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) job->hw_running_time = now; job->hw_recoder_time = now; + job->session->last_active = now; if (DEBUGGER_EN(REG)) rga2_dump_read_back_reg(scheduler); diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index e8df4106731d..2503f8cc3f73 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -2116,6 +2116,7 @@ static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) job->hw_running_time = now; job->hw_recoder_time = now; + job->session->last_active = now; if (DEBUGGER_EN(REG)) rga3_dump_read_back_reg(scheduler); diff --git a/drivers/video/rockchip/rga3/rga_debugger.c b/drivers/video/rockchip/rga3/rga_debugger.c index da37a17d8efd..3b7f11ebbb2f 100644 --- a/drivers/video/rockchip/rga3/rga_debugger.c +++ b/drivers/video/rockchip/rga3/rga_debugger.c @@ -192,11 +192,12 @@ static int rga_load_show(struct seq_file *m, void *data) int i; int load; u32 busy_time_total; + ktime_t now; session_manager = rga_drvdata->session_manager; seq_printf(m, "num of scheduler = %d\n", rga_drvdata->num_of_scheduler); - seq_printf(m, "================= load ==================\n"); + seq_puts(m, "================= load ==================\n"); for (i = 0; i < rga_drvdata->num_of_scheduler; i++) { scheduler = rga_drvdata->scheduler[i]; @@ -215,13 +216,20 @@ static int rga_load_show(struct seq_file *m, void *data) load = 100; seq_printf(m, "\t load = %d%%\n", load); - seq_printf(m, "-----------------------------------\n"); + seq_puts(m, "-----------------------------------\n"); } + seq_puts(m, "=========================================\n"); + seq_puts(m, " \n"); + mutex_lock(&session_manager->lock); + now = ktime_get(); idr_for_each_entry(&session_manager->ctx_id_idr, session, id) - seq_printf(m, "\t process %d: pid = %d, name: %s\n", id, + seq_printf(m, "%-9d %-8s %-6d %-s\n", + session->id, + ktime_us_delta(now, session->last_active) < RGA_LOAD_ACTIVE_MAX_US ? + "active" : "idle", session->tgid, session->pname); mutex_unlock(&session_manager->lock); diff --git a/drivers/video/rockchip/rga3/rga_drv.c b/drivers/video/rockchip/rga3/rga_drv.c index d692f58df3eb..550d2c2401d2 100644 --- a/drivers/video/rockchip/rga3/rga_drv.c +++ b/drivers/video/rockchip/rga3/rga_drv.c @@ -570,6 +570,8 @@ static struct rga_session *rga_session_init(void) session->tgid = current->tgid; session->pname = kstrdup_quotable_cmdline(current, GFP_KERNEL); + session->last_active = ktime_get(); + return session; } diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index 809006a2bc2b..8115031ec1a8 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -273,6 +273,7 @@ struct rga_job *rga_job_done(struct rga_scheduler_t *scheduler) scheduler->running_job = NULL; scheduler->timer.busy_time += ktime_us_delta(now, job->hw_recoder_time); + job->session->last_active = now; set_bit(RGA_JOB_STATE_DONE, &job->state); spin_unlock_irqrestore(&scheduler->irq_lock, flags); @@ -747,6 +748,7 @@ static int rga_request_scheduler_job_abort(struct rga_request *request) ktime_us_delta(ktime_get(), job->hw_recoder_time); scheduler->ops->soft_reset(scheduler); } + job->session->last_active = ktime_get(); pr_err("reset core[%d] by request[%d] abort", scheduler->core, request->id);