aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2014-01-14 07:06:29 -0500
committerSteven Rostedt <rostedt@goodmis.org>2014-04-21 13:59:28 -0400
commit65daaca7c6dac4db0ef64f2baac0e448cf5d847f (patch)
tree062503f1c7129c76cd79590f925ec763ba076171 /kernel
parent0b9b12c1b884eb34773312f15c194220025e0416 (diff)
tracing: Allow wakeup tracers to be used by instances
The wakeup and wakeup_rt tracers can now be used by instances. But they may only be used by one instance at a time (including the top level directory). This allows multiple tracers to run while the wakeup tracer is running simultaneously. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace_sched_wakeup.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
index 41e0b8aa78ed..1573c03640d2 100644
--- a/kernel/trace/trace_sched_wakeup.c
+++ b/kernel/trace/trace_sched_wakeup.c
@@ -601,6 +601,8 @@ static void stop_wakeup_tracer(struct trace_array *tr)
601 unregister_trace_sched_migrate_task(probe_wakeup_migrate_task, NULL); 601 unregister_trace_sched_migrate_task(probe_wakeup_migrate_task, NULL);
602} 602}
603 603
604static bool wakeup_busy;
605
604static int __wakeup_tracer_init(struct trace_array *tr) 606static int __wakeup_tracer_init(struct trace_array *tr)
605{ 607{
606 save_flags = trace_flags; 608 save_flags = trace_flags;
@@ -613,11 +615,16 @@ static int __wakeup_tracer_init(struct trace_array *tr)
613 wakeup_trace = tr; 615 wakeup_trace = tr;
614 ftrace_init_array_ops(tr, wakeup_tracer_call); 616 ftrace_init_array_ops(tr, wakeup_tracer_call);
615 start_wakeup_tracer(tr); 617 start_wakeup_tracer(tr);
618
619 wakeup_busy = true;
616 return 0; 620 return 0;
617} 621}
618 622
619static int wakeup_tracer_init(struct trace_array *tr) 623static int wakeup_tracer_init(struct trace_array *tr)
620{ 624{
625 if (wakeup_busy)
626 return -EBUSY;
627
621 wakeup_dl = 0; 628 wakeup_dl = 0;
622 wakeup_rt = 0; 629 wakeup_rt = 0;
623 return __wakeup_tracer_init(tr); 630 return __wakeup_tracer_init(tr);
@@ -625,6 +632,9 @@ static int wakeup_tracer_init(struct trace_array *tr)
625 632
626static int wakeup_rt_tracer_init(struct trace_array *tr) 633static int wakeup_rt_tracer_init(struct trace_array *tr)
627{ 634{
635 if (wakeup_busy)
636 return -EBUSY;
637
628 wakeup_dl = 0; 638 wakeup_dl = 0;
629 wakeup_rt = 1; 639 wakeup_rt = 1;
630 return __wakeup_tracer_init(tr); 640 return __wakeup_tracer_init(tr);
@@ -632,6 +642,9 @@ static int wakeup_rt_tracer_init(struct trace_array *tr)
632 642
633static int wakeup_dl_tracer_init(struct trace_array *tr) 643static int wakeup_dl_tracer_init(struct trace_array *tr)
634{ 644{
645 if (wakeup_busy)
646 return -EBUSY;
647
635 wakeup_dl = 1; 648 wakeup_dl = 1;
636 wakeup_rt = 0; 649 wakeup_rt = 0;
637 return __wakeup_tracer_init(tr); 650 return __wakeup_tracer_init(tr);
@@ -649,6 +662,7 @@ static void wakeup_tracer_reset(struct trace_array *tr)
649 set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag); 662 set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag);
650 set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag); 663 set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag);
651 ftrace_reset_array_ops(tr); 664 ftrace_reset_array_ops(tr);
665 wakeup_busy = false;
652} 666}
653 667
654static void wakeup_tracer_start(struct trace_array *tr) 668static void wakeup_tracer_start(struct trace_array *tr)
@@ -680,6 +694,7 @@ static struct tracer wakeup_tracer __read_mostly =
680#endif 694#endif
681 .open = wakeup_trace_open, 695 .open = wakeup_trace_open,
682 .close = wakeup_trace_close, 696 .close = wakeup_trace_close,
697 .allow_instances = true,
683 .use_max_tr = true, 698 .use_max_tr = true,
684}; 699};
685 700
@@ -702,6 +717,7 @@ static struct tracer wakeup_rt_tracer __read_mostly =
702#endif 717#endif
703 .open = wakeup_trace_open, 718 .open = wakeup_trace_open,
704 .close = wakeup_trace_close, 719 .close = wakeup_trace_close,
720 .allow_instances = true,
705 .use_max_tr = true, 721 .use_max_tr = true,
706}; 722};
707 723