aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcutree_trace.c')
-rw-r--r--kernel/rcutree_trace.c148
1 files changed, 24 insertions, 124 deletions
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c
index 8b2486722211..0e2ab6427b64 100644
--- a/kernel/rcutree_trace.c
+++ b/kernel/rcutree_trace.c
@@ -148,53 +148,27 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
148 rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted); 148 rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
149} 149}
150 150
151static int show_rcudata(struct seq_file *m, void *unused) 151static int show_rcudata(struct seq_file *m, void *v)
152{
153 int cpu;
154 struct rcu_state *rsp;
155
156 for_each_rcu_flavor(rsp) {
157 seq_printf(m, "%s:\n", rsp->name);
158 for_each_possible_cpu(cpu)
159 print_one_rcu_data(m, per_cpu_ptr(rsp->rda, cpu));
160 }
161 return 0;
162}
163
164static int rcudata_open(struct inode *inode, struct file *file)
165{
166 return single_open(file, show_rcudata, NULL);
167}
168
169static const struct file_operations rcudata_fops = {
170 .owner = THIS_MODULE,
171 .open = rcudata_open,
172 .read = seq_read,
173 .llseek = seq_lseek,
174 .release = single_release,
175};
176
177static int new_show_rcudata(struct seq_file *m, void *v)
178{ 152{
179 print_one_rcu_data(m, (struct rcu_data *)v); 153 print_one_rcu_data(m, (struct rcu_data *)v);
180 return 0; 154 return 0;
181} 155}
182 156
183static const struct seq_operations new_rcudate_op = { 157static const struct seq_operations rcudate_op = {
184 .start = r_start, 158 .start = r_start,
185 .next = r_next, 159 .next = r_next,
186 .stop = r_stop, 160 .stop = r_stop,
187 .show = new_show_rcudata, 161 .show = show_rcudata,
188}; 162};
189 163
190static int new_rcudata_open(struct inode *inode, struct file *file) 164static int rcudata_open(struct inode *inode, struct file *file)
191{ 165{
192 return r_open(inode, file, &new_rcudate_op); 166 return r_open(inode, file, &rcudate_op);
193} 167}
194 168
195static const struct file_operations new_rcudata_fops = { 169static const struct file_operations rcudata_fops = {
196 .owner = THIS_MODULE, 170 .owner = THIS_MODULE,
197 .open = new_rcudata_open, 171 .open = rcudata_open,
198 .read = seq_read, 172 .read = seq_read,
199 .llseek = no_llseek, 173 .llseek = no_llseek,
200 .release = seq_release, 174 .release = seq_release,
@@ -234,40 +208,7 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)
234 rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted); 208 rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
235} 209}
236 210
237static int show_rcudata_csv(struct seq_file *m, void *unused) 211static int show_rcudata_csv(struct seq_file *m, void *v)
238{
239 int cpu;
240 struct rcu_state *rsp;
241
242 seq_puts(m, "\"CPU\",\"Online?\",\"c\",\"g\",\"pq\",\"pq\",");
243 seq_puts(m, "\"dt\",\"dt nesting\",\"dt NMI nesting\",\"df\",");
244 seq_puts(m, "\"of\",\"qll\",\"ql\",\"qs\"");
245#ifdef CONFIG_RCU_BOOST
246 seq_puts(m, "\"kt\",\"ktl\"");
247#endif /* #ifdef CONFIG_RCU_BOOST */
248 seq_puts(m, ",\"b\",\"ci\",\"co\",\"ca\"\n");
249 for_each_rcu_flavor(rsp) {
250 seq_printf(m, "\"%s:\"\n", rsp->name);
251 for_each_possible_cpu(cpu)
252 print_one_rcu_data_csv(m, per_cpu_ptr(rsp->rda, cpu));
253 }
254 return 0;
255}
256
257static int rcudata_csv_open(struct inode *inode, struct file *file)
258{
259 return single_open(file, show_rcudata_csv, NULL);
260}
261
262static const struct file_operations rcudata_csv_fops = {
263 .owner = THIS_MODULE,
264 .open = rcudata_csv_open,
265 .read = seq_read,
266 .llseek = seq_lseek,
267 .release = single_release,
268};
269
270static int new_show_rcudata_csv(struct seq_file *m, void *v)
271{ 212{
272 struct rcu_data *rdp = (struct rcu_data *)v; 213 struct rcu_data *rdp = (struct rcu_data *)v;
273 if (cpumask_first(cpu_possible_mask) == rdp->cpu) { 214 if (cpumask_first(cpu_possible_mask) == rdp->cpu) {
@@ -284,21 +225,21 @@ static int new_show_rcudata_csv(struct seq_file *m, void *v)
284 return 0; 225 return 0;
285} 226}
286 227
287static const struct seq_operations new_rcudate_csv_op = { 228static const struct seq_operations rcudate_csv_op = {
288 .start = r_start, 229 .start = r_start,
289 .next = r_next, 230 .next = r_next,
290 .stop = r_stop, 231 .stop = r_stop,
291 .show = new_show_rcudata_csv, 232 .show = show_rcudata_csv,
292}; 233};
293 234
294static int new_rcudata_csv_open(struct inode *inode, struct file *file) 235static int rcudata_csv_open(struct inode *inode, struct file *file)
295{ 236{
296 return r_open(inode, file, &new_rcudate_csv_op); 237 return r_open(inode, file, &rcudate_csv_op);
297} 238}
298 239
299static const struct file_operations new_rcudata_csv_fops = { 240static const struct file_operations rcudata_csv_fops = {
300 .owner = THIS_MODULE, 241 .owner = THIS_MODULE,
301 .open = new_rcudata_csv_open, 242 .open = rcudata_csv_open,
302 .read = seq_read, 243 .read = seq_read,
303 .llseek = no_llseek, 244 .llseek = no_llseek,
304 .release = seq_release, 245 .release = seq_release,
@@ -484,53 +425,27 @@ static void print_one_rcu_pending(struct seq_file *m, struct rcu_data *rdp)
484 rdp->n_rp_need_nothing); 425 rdp->n_rp_need_nothing);
485} 426}
486 427
487static int show_rcu_pending(struct seq_file *m, void *unused) 428static int show_rcu_pending(struct seq_file *m, void *v)
488{
489 int cpu;
490 struct rcu_state *rsp;
491
492 for_each_rcu_flavor(rsp) {
493 seq_printf(m, "%s:\n", rsp->name);
494 for_each_possible_cpu(cpu)
495 print_one_rcu_pending(m, per_cpu_ptr(rsp->rda, cpu));
496 }
497 return 0;
498}
499
500static int rcu_pending_open(struct inode *inode, struct file *file)
501{
502 return single_open(file, show_rcu_pending, NULL);
503}
504
505static const struct file_operations rcu_pending_fops = {
506 .owner = THIS_MODULE,
507 .open = rcu_pending_open,
508 .read = seq_read,
509 .llseek = seq_lseek,
510 .release = single_release,
511};
512
513static int new_show_rcu_pending(struct seq_file *m, void *v)
514{ 429{
515 print_one_rcu_pending(m, (struct rcu_data *)v); 430 print_one_rcu_pending(m, (struct rcu_data *)v);
516 return 0; 431 return 0;
517} 432}
518 433
519static const struct seq_operations new_rcu_pending_op = { 434static const struct seq_operations rcu_pending_op = {
520 .start = r_start, 435 .start = r_start,
521 .next = r_next, 436 .next = r_next,
522 .stop = r_stop, 437 .stop = r_stop,
523 .show = new_show_rcu_pending, 438 .show = show_rcu_pending,
524}; 439};
525 440
526static int new_rcu_pending_open(struct inode *inode, struct file *file) 441static int rcu_pending_open(struct inode *inode, struct file *file)
527{ 442{
528 return r_open(inode, file, &new_rcu_pending_op); 443 return r_open(inode, file, &rcu_pending_op);
529} 444}
530 445
531static const struct file_operations new_rcu_pending_fops = { 446static const struct file_operations rcu_pending_fops = {
532 .owner = THIS_MODULE, 447 .owner = THIS_MODULE,
533 .open = new_rcu_pending_open, 448 .open = rcu_pending_open,
534 .read = seq_read, 449 .read = seq_read,
535 .llseek = no_llseek, 450 .llseek = no_llseek,
536 .release = seq_release, 451 .release = seq_release,
@@ -577,17 +492,17 @@ static int __init rcutree_trace_init(void)
577 goto free_out; 492 goto free_out;
578 493
579 retval = debugfs_create_file("rcudata", 0444, 494 retval = debugfs_create_file("rcudata", 0444,
580 rspdir, rsp, &new_rcudata_fops); 495 rspdir, rsp, &rcudata_fops);
581 if (!retval) 496 if (!retval)
582 goto free_out; 497 goto free_out;
583 498
584 retval = debugfs_create_file("rcudata.csv", 0444, 499 retval = debugfs_create_file("rcudata.csv", 0444,
585 rspdir, rsp, &new_rcudata_csv_fops); 500 rspdir, rsp, &rcudata_csv_fops);
586 if (!retval) 501 if (!retval)
587 goto free_out; 502 goto free_out;
588 503
589 retval = debugfs_create_file("rcu_pending", 0444, 504 retval = debugfs_create_file("rcu_pending", 0444,
590 rspdir, rsp, &new_rcu_pending_fops); 505 rspdir, rsp, &rcu_pending_fops);
591 if (!retval) 506 if (!retval)
592 goto free_out; 507 goto free_out;
593 } 508 }
@@ -597,16 +512,6 @@ static int __init rcutree_trace_init(void)
597 if (!retval) 512 if (!retval)
598 goto free_out; 513 goto free_out;
599 514
600 retval = debugfs_create_file("rcudata", 0444, rcudir,
601 NULL, &rcudata_fops);
602 if (!retval)
603 goto free_out;
604
605 retval = debugfs_create_file("rcudata.csv", 0444, rcudir,
606 NULL, &rcudata_csv_fops);
607 if (!retval)
608 goto free_out;
609
610 if (rcu_boost_trace_create_file(rcudir)) 515 if (rcu_boost_trace_create_file(rcudir))
611 goto free_out; 516 goto free_out;
612 517
@@ -619,11 +524,6 @@ static int __init rcutree_trace_init(void)
619 if (!retval) 524 if (!retval)
620 goto free_out; 525 goto free_out;
621 526
622 retval = debugfs_create_file("rcu_pending", 0444, rcudir,
623 NULL, &rcu_pending_fops);
624 if (!retval)
625 goto free_out;
626
627 retval = debugfs_create_file("rcutorture", 0444, rcudir, 527 retval = debugfs_create_file("rcutorture", 0444, rcudir,
628 NULL, &rcutorture_fops); 528 NULL, &rcutorture_fops);
629 if (!retval) 529 if (!retval)