diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_events.c | 20 | ||||
-rw-r--r-- | kernel/trace/trace_syscalls.c | 10 |
2 files changed, 17 insertions, 13 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 97b0b3aa166d..189b09baf4fb 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -118,9 +118,11 @@ int trace_event_raw_init(struct ftrace_event_call *call) | |||
118 | } | 118 | } |
119 | EXPORT_SYMBOL_GPL(trace_event_raw_init); | 119 | EXPORT_SYMBOL_GPL(trace_event_raw_init); |
120 | 120 | ||
121 | static void ftrace_event_enable_disable(struct ftrace_event_call *call, | 121 | static int ftrace_event_enable_disable(struct ftrace_event_call *call, |
122 | int enable) | 122 | int enable) |
123 | { | 123 | { |
124 | int ret = 0; | ||
125 | |||
124 | switch (enable) { | 126 | switch (enable) { |
125 | case 0: | 127 | case 0: |
126 | if (call->enabled) { | 128 | if (call->enabled) { |
@@ -131,12 +133,20 @@ static void ftrace_event_enable_disable(struct ftrace_event_call *call, | |||
131 | break; | 133 | break; |
132 | case 1: | 134 | case 1: |
133 | if (!call->enabled) { | 135 | if (!call->enabled) { |
134 | call->enabled = 1; | ||
135 | tracing_start_cmdline_record(); | 136 | tracing_start_cmdline_record(); |
136 | call->regfunc(call); | 137 | ret = call->regfunc(call); |
138 | if (ret) { | ||
139 | tracing_stop_cmdline_record(); | ||
140 | pr_info("event trace: Could not enable event " | ||
141 | "%s\n", call->name); | ||
142 | break; | ||
143 | } | ||
144 | call->enabled = 1; | ||
137 | } | 145 | } |
138 | break; | 146 | break; |
139 | } | 147 | } |
148 | |||
149 | return ret; | ||
140 | } | 150 | } |
141 | 151 | ||
142 | static void ftrace_clear_events(void) | 152 | static void ftrace_clear_events(void) |
@@ -415,7 +425,7 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt, | |||
415 | case 0: | 425 | case 0: |
416 | case 1: | 426 | case 1: |
417 | mutex_lock(&event_mutex); | 427 | mutex_lock(&event_mutex); |
418 | ftrace_event_enable_disable(call, val); | 428 | ret = ftrace_event_enable_disable(call, val); |
419 | mutex_unlock(&event_mutex); | 429 | mutex_unlock(&event_mutex); |
420 | break; | 430 | break; |
421 | 431 | ||
@@ -425,7 +435,7 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt, | |||
425 | 435 | ||
426 | *ppos += cnt; | 436 | *ppos += cnt; |
427 | 437 | ||
428 | return cnt; | 438 | return ret ? ret : cnt; |
429 | } | 439 | } |
430 | 440 | ||
431 | static ssize_t | 441 | static ssize_t |
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index b957edd0ca3b..75289f372dd2 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c | |||
@@ -325,10 +325,7 @@ int reg_event_syscall_enter(struct ftrace_event_call *call) | |||
325 | mutex_lock(&syscall_trace_lock); | 325 | mutex_lock(&syscall_trace_lock); |
326 | if (!sys_refcount_enter) | 326 | if (!sys_refcount_enter) |
327 | ret = register_trace_sys_enter(ftrace_syscall_enter); | 327 | ret = register_trace_sys_enter(ftrace_syscall_enter); |
328 | if (ret) { | 328 | if (!ret) { |
329 | pr_info("event trace: Could not activate" | ||
330 | "syscall entry trace point"); | ||
331 | } else { | ||
332 | set_bit(num, enabled_enter_syscalls); | 329 | set_bit(num, enabled_enter_syscalls); |
333 | sys_refcount_enter++; | 330 | sys_refcount_enter++; |
334 | } | 331 | } |
@@ -362,10 +359,7 @@ int reg_event_syscall_exit(struct ftrace_event_call *call) | |||
362 | mutex_lock(&syscall_trace_lock); | 359 | mutex_lock(&syscall_trace_lock); |
363 | if (!sys_refcount_exit) | 360 | if (!sys_refcount_exit) |
364 | ret = register_trace_sys_exit(ftrace_syscall_exit); | 361 | ret = register_trace_sys_exit(ftrace_syscall_exit); |
365 | if (ret) { | 362 | if (!ret) { |
366 | pr_info("event trace: Could not activate" | ||
367 | "syscall exit trace point"); | ||
368 | } else { | ||
369 | set_bit(num, enabled_exit_syscalls); | 363 | set_bit(num, enabled_exit_syscalls); |
370 | sys_refcount_exit++; | 364 | sys_refcount_exit++; |
371 | } | 365 | } |