sched/rt: print RT tasks when RT throttling is activated
Existing debug prints do not provide any clues about which tasks may have triggered RT throttling. Print the names and PIDs of all tasks on the throttled rt_rq to help narrow down the source of the problem. Change-Id: I180534c8a647254ed38e89d0c981a8f8bccd741c Signed-off-by: Matt Wagantall <mattw@codeaurora.org> [rameezmustafa@codeaurora.org]: Port to msm-3.18] Signed-off-by: Syed Rameez Mustafa <rameezmustafa@codeaurora.org>
This commit is contained in:
parent
3276c3d7bc
commit
989f33f789
1 changed files with 43 additions and 1 deletions
|
@ -891,6 +891,42 @@ static inline int rt_se_prio(struct sched_rt_entity *rt_se)
|
|||
return rt_task_of(rt_se)->prio;
|
||||
}
|
||||
|
||||
static void dump_throttled_rt_tasks(struct rt_rq *rt_rq)
|
||||
{
|
||||
struct rt_prio_array *array = &rt_rq->active;
|
||||
struct sched_rt_entity *rt_se;
|
||||
char buf[500];
|
||||
char *pos = buf;
|
||||
char *end = buf + sizeof(buf);
|
||||
int idx;
|
||||
|
||||
pos += snprintf(pos, sizeof(buf),
|
||||
"sched: RT throttling activated for rt_rq %p (cpu %d)\n",
|
||||
rt_rq, cpu_of(rq_of_rt_rq(rt_rq)));
|
||||
|
||||
if (bitmap_empty(array->bitmap, MAX_RT_PRIO))
|
||||
goto out;
|
||||
|
||||
pos += snprintf(pos, end - pos, "potential CPU hogs:\n");
|
||||
idx = sched_find_first_bit(array->bitmap);
|
||||
while (idx < MAX_RT_PRIO) {
|
||||
list_for_each_entry(rt_se, array->queue + idx, run_list) {
|
||||
struct task_struct *p;
|
||||
|
||||
if (!rt_entity_is_task(rt_se))
|
||||
continue;
|
||||
|
||||
p = rt_task_of(rt_se);
|
||||
if (pos < end)
|
||||
pos += snprintf(pos, end - pos, "\t%s (%d)\n",
|
||||
p->comm, p->pid);
|
||||
}
|
||||
idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx + 1);
|
||||
}
|
||||
out:
|
||||
printk_deferred("%s", buf);
|
||||
}
|
||||
|
||||
static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)
|
||||
{
|
||||
u64 runtime = sched_rt_runtime(rt_rq);
|
||||
|
@ -914,8 +950,14 @@ static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)
|
|||
* but accrue some time due to boosting.
|
||||
*/
|
||||
if (likely(rt_b->rt_runtime)) {
|
||||
static bool once = false;
|
||||
|
||||
rt_rq->rt_throttled = 1;
|
||||
printk_deferred_once("sched: RT throttling activated\n");
|
||||
|
||||
if (!once) {
|
||||
once = true;
|
||||
dump_throttled_rt_tasks(rt_rq);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* In case we did anyway, make it go away,
|
||||
|
|
Loading…
Add table
Reference in a new issue