video: rockchip: rga3: "load" node supports querying session active status

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: If875c401015baf6f34172c3c10a61b603df345ae
This commit is contained in:
Yu Qiaowei
2024-08-15 16:29:13 +08:00
committed by Tao Huang
parent 9d05629d69
commit b0cac0a410
6 changed files with 20 additions and 3 deletions

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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, "<session> <status> <tgid> <process>\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);

View File

@@ -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;
}

View File

@@ -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);