summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Poirier <mathieu.poirier@linaro.org>2017-07-19 14:51:49 -0600
committerMathieu Poirier <mathieu.poirier@linaro.org>2018-02-13 10:05:39 -0700
commit4a95e8ab088160dbede104900f6a35d20db9a79b (patch)
treed2e66cda88d240f0350a2a52399a4fe7139c0a01
parent9d6fed8706ca6d594ca85e77180329cb16e2adc1 (diff)
sched/debug: Add 'rq_debug' proc entry
-rw-r--r--kernel/sched/debug.c47
1 files changed, 45 insertions, 2 deletions
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 1ca0130ed4f9..0dcf9355941f 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -623,21 +623,37 @@ void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)
void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq *dl_rq)
{
struct dl_bw *dl_bw;
+#ifdef CONFIG_SMP
+ struct rq *rq = container_of(dl_rq, struct rq, dl);
+#endif
SEQ_printf(m, "\ndl_rq[%d]:\n", cpu);
#define PU(x) \
SEQ_printf(m, " .%-30s: %lu\n", #x, (unsigned long)(dl_rq->x))
+#ifdef CONFIG_SMP
+ SEQ_printf(m, " .%-30s: %s\n", "online", rq->online ? "yes":"no");
+#endif
PU(dl_nr_running);
+ PU(running_bw);
+ PU(this_bw);
+
+#ifdef CONFIG_SMP
+ SEQ_printf(m, " .%-30s: %*pbl (%s)\n",
+ "rd->span", cpumask_pr_args(rq->rd->span),
+ rq->rd == &def_root_domain ? "default" : "normal");
+#endif
+
#ifdef CONFIG_SMP
PU(dl_nr_migratory);
dl_bw = &cpu_rq(cpu)->rd->dl_bw;
+ SEQ_printf(m, " .%-30s: %lld\n", "rd->dl_bw->bw",
+ dl_bw->bw * cpumask_weight(rq->rd->span));
#else
dl_bw = &dl_rq->dl_bw;
#endif
- SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->bw", dl_bw->bw);
- SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->total_bw", dl_bw->total_bw);
+ SEQ_printf(m, " .%-30s: %lld\n", "rd->dl_bw->total_bw", dl_bw->total_bw);
#undef PU
}
@@ -864,6 +880,28 @@ static const struct file_operations sched_debug_fops = {
.release = sched_debug_release,
};
+static int rq_debug_show(struct seq_file *seq, void *v)
+{
+ int cpu;
+
+ for_each_possible_cpu(cpu)
+ print_dl_stats(seq, cpu);
+
+ return 0;
+}
+
+static int rq_debug_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, rq_debug_show, NULL);
+}
+
+static const struct file_operations rq_debug_fops = {
+ .open = rq_debug_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
static int __init init_sched_debug_procfs(void)
{
struct proc_dir_entry *pe;
@@ -871,6 +909,11 @@ static int __init init_sched_debug_procfs(void)
pe = proc_create("sched_debug", 0444, NULL, &sched_debug_fops);
if (!pe)
return -ENOMEM;
+
+ pe = proc_create("rq_debug", 0444, NULL, &rq_debug_fops);
+ if (!pe)
+ return -ENOMEM;
+
return 0;
}