mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
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:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user