|
@@ -46,6 +46,8 @@
|
|
|
#define RCU_TREE_NONCORE
|
|
|
#include "rcutree.h"
|
|
|
|
|
|
+#ifdef CONFIG_RCU_BOOST
|
|
|
+
|
|
|
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
|
|
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_cpu);
|
|
|
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
|
@@ -58,6 +60,8 @@ static char convert_kthread_status(unsigned int kthread_status)
|
|
|
return "SRWOY"[kthread_status];
|
|
|
}
|
|
|
|
|
|
+#endif /* #ifdef CONFIG_RCU_BOOST */
|
|
|
+
|
|
|
static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
|
|
|
{
|
|
|
if (!rdp->beenonline)
|
|
@@ -76,7 +80,7 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
|
|
|
rdp->dynticks_fqs);
|
|
|
#endif /* #ifdef CONFIG_NO_HZ */
|
|
|
seq_printf(m, " of=%lu ri=%lu", rdp->offline_fqs, rdp->resched_ipi);
|
|
|
- seq_printf(m, " ql=%ld qs=%c%c%c%c kt=%d/%c/%d ktl=%x b=%ld",
|
|
|
+ seq_printf(m, " ql=%ld qs=%c%c%c%c",
|
|
|
rdp->qlen,
|
|
|
".N"[rdp->nxttail[RCU_NEXT_READY_TAIL] !=
|
|
|
rdp->nxttail[RCU_NEXT_TAIL]],
|
|
@@ -84,13 +88,16 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
|
|
|
rdp->nxttail[RCU_NEXT_READY_TAIL]],
|
|
|
".W"[rdp->nxttail[RCU_DONE_TAIL] !=
|
|
|
rdp->nxttail[RCU_WAIT_TAIL]],
|
|
|
- ".D"[&rdp->nxtlist != rdp->nxttail[RCU_DONE_TAIL]],
|
|
|
+ ".D"[&rdp->nxtlist != rdp->nxttail[RCU_DONE_TAIL]]);
|
|
|
+#ifdef CONFIG_RCU_BOOST
|
|
|
+ seq_printf(m, " kt=%d/%c/%d ktl=%x",
|
|
|
per_cpu(rcu_cpu_has_work, rdp->cpu),
|
|
|
convert_kthread_status(per_cpu(rcu_cpu_kthread_status,
|
|
|
rdp->cpu)),
|
|
|
per_cpu(rcu_cpu_kthread_cpu, rdp->cpu),
|
|
|
- per_cpu(rcu_cpu_kthread_loops, rdp->cpu) & 0xffff,
|
|
|
- rdp->blimit);
|
|
|
+ per_cpu(rcu_cpu_kthread_loops, rdp->cpu) & 0xffff);
|
|
|
+#endif /* #ifdef CONFIG_RCU_BOOST */
|
|
|
+ seq_printf(m, " b=%ld", rdp->blimit);
|
|
|
seq_printf(m, " ci=%lu co=%lu ca=%lu\n",
|
|
|
rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
|
|
|
}
|
|
@@ -147,18 +154,21 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)
|
|
|
rdp->dynticks_fqs);
|
|
|
#endif /* #ifdef CONFIG_NO_HZ */
|
|
|
seq_printf(m, ",%lu,%lu", rdp->offline_fqs, rdp->resched_ipi);
|
|
|
- seq_printf(m, ",%ld,\"%c%c%c%c\",%d,\"%c\",%ld", rdp->qlen,
|
|
|
+ seq_printf(m, ",%ld,\"%c%c%c%c\"", rdp->qlen,
|
|
|
".N"[rdp->nxttail[RCU_NEXT_READY_TAIL] !=
|
|
|
rdp->nxttail[RCU_NEXT_TAIL]],
|
|
|
".R"[rdp->nxttail[RCU_WAIT_TAIL] !=
|
|
|
rdp->nxttail[RCU_NEXT_READY_TAIL]],
|
|
|
".W"[rdp->nxttail[RCU_DONE_TAIL] !=
|
|
|
rdp->nxttail[RCU_WAIT_TAIL]],
|
|
|
- ".D"[&rdp->nxtlist != rdp->nxttail[RCU_DONE_TAIL]],
|
|
|
+ ".D"[&rdp->nxtlist != rdp->nxttail[RCU_DONE_TAIL]]);
|
|
|
+#ifdef CONFIG_RCU_BOOST
|
|
|
+ seq_printf(m, ",%d,\"%c\"",
|
|
|
per_cpu(rcu_cpu_has_work, rdp->cpu),
|
|
|
convert_kthread_status(per_cpu(rcu_cpu_kthread_status,
|
|
|
- rdp->cpu)),
|
|
|
- rdp->blimit);
|
|
|
+ rdp->cpu)));
|
|
|
+#endif /* #ifdef CONFIG_RCU_BOOST */
|
|
|
+ seq_printf(m, ",%ld", rdp->blimit);
|
|
|
seq_printf(m, ",%lu,%lu,%lu\n",
|
|
|
rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
|
|
|
}
|
|
@@ -169,7 +179,11 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)
|
|
|
#ifdef CONFIG_NO_HZ
|
|
|
seq_puts(m, "\"dt\",\"dt nesting\",\"dt NMI nesting\",\"df\",");
|
|
|
#endif /* #ifdef CONFIG_NO_HZ */
|
|
|
- seq_puts(m, "\"of\",\"ri\",\"ql\",\"b\",\"ci\",\"co\",\"ca\"\n");
|
|
|
+ seq_puts(m, "\"of\",\"ri\",\"ql\",\"qs\"");
|
|
|
+#ifdef CONFIG_RCU_BOOST
|
|
|
+ seq_puts(m, "\"kt\",\"ktl\"");
|
|
|
+#endif /* #ifdef CONFIG_RCU_BOOST */
|
|
|
+ seq_puts(m, ",\"b\",\"ci\",\"co\",\"ca\"\n");
|
|
|
#ifdef CONFIG_TREE_PREEMPT_RCU
|
|
|
seq_puts(m, "\"rcu_preempt:\"\n");
|
|
|
PRINT_RCU_DATA(rcu_preempt_data, print_one_rcu_data_csv, m);
|