diff options
| author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2014-01-14 07:06:29 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2014-04-21 13:59:28 -0400 |
| commit | 65daaca7c6dac4db0ef64f2baac0e448cf5d847f (patch) | |
| tree | 062503f1c7129c76cd79590f925ec763ba076171 /kernel | |
| parent | 0b9b12c1b884eb34773312f15c194220025e0416 (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.c | 16 |
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 | ||
| 604 | static bool wakeup_busy; | ||
| 605 | |||
| 604 | static int __wakeup_tracer_init(struct trace_array *tr) | 606 | static 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 | ||
| 619 | static int wakeup_tracer_init(struct trace_array *tr) | 623 | static 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 | ||
| 626 | static int wakeup_rt_tracer_init(struct trace_array *tr) | 633 | static 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 | ||
| 633 | static int wakeup_dl_tracer_init(struct trace_array *tr) | 643 | static 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 | ||
| 654 | static void wakeup_tracer_start(struct trace_array *tr) | 668 | static 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 | ||
