diff options
Diffstat (limited to 'kernel/rcutree_trace.c')
-rw-r--r-- | kernel/rcutree_trace.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c index a11522f62c71..e387a642632b 100644 --- a/kernel/rcutree_trace.c +++ b/kernel/rcutree_trace.c | |||
@@ -267,6 +267,43 @@ static const struct file_operations rcudata_csv_fops = { | |||
267 | .release = single_release, | 267 | .release = single_release, |
268 | }; | 268 | }; |
269 | 269 | ||
270 | static int new_show_rcudata_csv(struct seq_file *m, void *v) | ||
271 | { | ||
272 | struct rcu_data *rdp = (struct rcu_data *)v; | ||
273 | if (cpumask_first(cpu_possible_mask) == rdp->cpu) { | ||
274 | seq_puts(m, "\"CPU\",\"Online?\",\"c\",\"g\",\"pq\",\"pq\","); | ||
275 | seq_puts(m, "\"dt\",\"dt nesting\",\"dt NMI nesting\",\"df\","); | ||
276 | seq_puts(m, "\"of\",\"qll\",\"ql\",\"qs\""); | ||
277 | #ifdef CONFIG_RCU_BOOST | ||
278 | seq_puts(m, "\"kt\",\"ktl\""); | ||
279 | #endif /* #ifdef CONFIG_RCU_BOOST */ | ||
280 | seq_puts(m, ",\"b\",\"ci\",\"co\",\"ca\"\n"); | ||
281 | } | ||
282 | |||
283 | print_one_rcu_data_csv(m, rdp); | ||
284 | return 0; | ||
285 | } | ||
286 | |||
287 | static const struct seq_operations new_rcudate_csv_op = { | ||
288 | .start = r_start, | ||
289 | .next = r_next, | ||
290 | .stop = r_stop, | ||
291 | .show = new_show_rcudata_csv, | ||
292 | }; | ||
293 | |||
294 | static int new_rcudata_csv_open(struct inode *inode, struct file *file) | ||
295 | { | ||
296 | return r_open(inode, file, &new_rcudate_csv_op); | ||
297 | } | ||
298 | |||
299 | static const struct file_operations new_rcudata_csv_fops = { | ||
300 | .owner = THIS_MODULE, | ||
301 | .open = new_rcudata_csv_open, | ||
302 | .read = seq_read, | ||
303 | .llseek = no_llseek, | ||
304 | .release = seq_release, | ||
305 | }; | ||
306 | |||
270 | #ifdef CONFIG_RCU_BOOST | 307 | #ifdef CONFIG_RCU_BOOST |
271 | 308 | ||
272 | static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) | 309 | static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) |
@@ -519,6 +556,11 @@ static int __init rcutree_trace_init(void) | |||
519 | rspdir, rsp, &new_rcudata_fops); | 556 | rspdir, rsp, &new_rcudata_fops); |
520 | if (!retval) | 557 | if (!retval) |
521 | goto free_out; | 558 | goto free_out; |
559 | |||
560 | retval = debugfs_create_file("rcudata.csv", 0444, | ||
561 | rspdir, rsp, &new_rcudata_csv_fops); | ||
562 | if (!retval) | ||
563 | goto free_out; | ||
522 | } | 564 | } |
523 | 565 | ||
524 | retval = debugfs_create_file("rcubarrier", 0444, rcudir, | 566 | retval = debugfs_create_file("rcubarrier", 0444, rcudir, |