lkml.org 
[lkml]   [2016]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 2/4] tracing: Do not start benchmark on boot up
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

Trace events are enabled every early on boot up via the boot command line
parameter. The benchmark tool creates a new thread to perform the trace
event benchmarking. But at start up, it is called before scheduling is set
up and this crashes the kerenl.

Have the benchmark fail to register when started via the kernel command
line.

Also, since the registering of a tracepoint now can handle failure cases,
return -ENOMEM instead of warning if the thread can not be created.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_benchmark.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace_benchmark.c b/kernel/trace/trace_benchmark.c
index f76d0416dd83..2bc7dc3e8ff8 100644
--- a/kernel/trace/trace_benchmark.c
+++ b/kernel/trace/trace_benchmark.c
@@ -166,9 +166,18 @@ static int benchmark_event_kthread(void *arg)
*/
int trace_benchmark_reg(void)
{
+ if (system_state != SYSTEM_RUNNING) {
+ pr_warning("trace benchmark cannot be started via kernel command line\n");
+ return -EBUSY;
+ }
+
bm_event_thread = kthread_run(benchmark_event_kthread,
NULL, "event_benchmark");
- WARN_ON(!bm_event_thread);
+ if (!bm_event_thread) {
+ pr_warning("trace benchmark failed to create kernel thread\n");
+ return -ENOMEM;
+ }
+
return 0;
}

@@ -183,6 +192,7 @@ void trace_benchmark_unreg(void)
return;

kthread_stop(bm_event_thread);
+ bm_event_thread = NULL;

strcpy(bm_str, "START");
bm_total = 0;
--
2.10.2

\
 
 \ /
  Last update: 2016-11-29 16:01    [W:0.050 / U:1.988 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site