Commit 97f4e142 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-v4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes and cleanups from Steven Rostedt:
 "While cleaning out my INBOX, I found a few patches that were lost in
  the noise. These are minor bug fixes and clean ups. Those include:

   - avoid a string overflow

   - code that didn't match the comment (but should)

   - a small code optimization (use of a conditional)

   - quiet printf warnings

   - nuke unused code

   - fix function graph interrupt annotation"

* tag 'trace-v4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Fix missing return symbol in function_graph output
  ftrace: Nuke clear_ftrace_function
  tracing: Use __printf markup to silence compiler
  tracing: Optimize trace_buffer_iter() logic
  tracing: Make create_filter() code match the comments
  tracing: Avoid string overflow
parents 0fa3ecd8 1fe4293f
...@@ -223,7 +223,6 @@ extern enum ftrace_tracing_type_t ftrace_tracing_type; ...@@ -223,7 +223,6 @@ extern enum ftrace_tracing_type_t ftrace_tracing_type;
*/ */
int register_ftrace_function(struct ftrace_ops *ops); int register_ftrace_function(struct ftrace_ops *ops);
int unregister_ftrace_function(struct ftrace_ops *ops); int unregister_ftrace_function(struct ftrace_ops *ops);
void clear_ftrace_function(void);
extern void ftrace_stub(unsigned long a0, unsigned long a1, extern void ftrace_stub(unsigned long a0, unsigned long a1,
struct ftrace_ops *op, struct pt_regs *regs); struct ftrace_ops *op, struct pt_regs *regs);
...@@ -239,7 +238,6 @@ static inline int ftrace_nr_registered_ops(void) ...@@ -239,7 +238,6 @@ static inline int ftrace_nr_registered_ops(void)
{ {
return 0; return 0;
} }
static inline void clear_ftrace_function(void) { }
static inline void ftrace_kill(void) { } static inline void ftrace_kill(void) { }
static inline void ftrace_free_init_mem(void) { } static inline void ftrace_free_init_mem(void) { }
static inline void ftrace_free_mem(struct module *mod, void *start, void *end) { } static inline void ftrace_free_mem(struct module *mod, void *start, void *end) { }
......
...@@ -192,17 +192,6 @@ static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip, ...@@ -192,17 +192,6 @@ static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip,
op->saved_func(ip, parent_ip, op, regs); op->saved_func(ip, parent_ip, op, regs);
} }
/**
* clear_ftrace_function - reset the ftrace function
*
* This NULLs the ftrace function and in essence stops
* tracing. There may be lag
*/
void clear_ftrace_function(void)
{
ftrace_trace_function = ftrace_stub;
}
static void ftrace_sync(struct work_struct *work) static void ftrace_sync(struct work_struct *work)
{ {
/* /*
...@@ -6689,7 +6678,7 @@ void ftrace_kill(void) ...@@ -6689,7 +6678,7 @@ void ftrace_kill(void)
{ {
ftrace_disabled = 1; ftrace_disabled = 1;
ftrace_enabled = 0; ftrace_enabled = 0;
clear_ftrace_function(); ftrace_trace_function = ftrace_stub;
} }
/** /**
......
...@@ -2953,6 +2953,7 @@ int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) ...@@ -2953,6 +2953,7 @@ int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
} }
EXPORT_SYMBOL_GPL(trace_vbprintk); EXPORT_SYMBOL_GPL(trace_vbprintk);
__printf(3, 0)
static int static int
__trace_array_vprintk(struct ring_buffer *buffer, __trace_array_vprintk(struct ring_buffer *buffer,
unsigned long ip, const char *fmt, va_list args) unsigned long ip, const char *fmt, va_list args)
...@@ -3007,12 +3008,14 @@ __trace_array_vprintk(struct ring_buffer *buffer, ...@@ -3007,12 +3008,14 @@ __trace_array_vprintk(struct ring_buffer *buffer,
return len; return len;
} }
__printf(3, 0)
int trace_array_vprintk(struct trace_array *tr, int trace_array_vprintk(struct trace_array *tr,
unsigned long ip, const char *fmt, va_list args) unsigned long ip, const char *fmt, va_list args)
{ {
return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args); return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
} }
__printf(3, 0)
int trace_array_printk(struct trace_array *tr, int trace_array_printk(struct trace_array *tr,
unsigned long ip, const char *fmt, ...) unsigned long ip, const char *fmt, ...)
{ {
...@@ -3028,6 +3031,7 @@ int trace_array_printk(struct trace_array *tr, ...@@ -3028,6 +3031,7 @@ int trace_array_printk(struct trace_array *tr,
return ret; return ret;
} }
__printf(3, 4)
int trace_array_printk_buf(struct ring_buffer *buffer, int trace_array_printk_buf(struct ring_buffer *buffer,
unsigned long ip, const char *fmt, ...) unsigned long ip, const char *fmt, ...)
{ {
...@@ -3043,6 +3047,7 @@ int trace_array_printk_buf(struct ring_buffer *buffer, ...@@ -3043,6 +3047,7 @@ int trace_array_printk_buf(struct ring_buffer *buffer,
return ret; return ret;
} }
__printf(2, 0)
int trace_vprintk(unsigned long ip, const char *fmt, va_list args) int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
{ {
return trace_array_vprintk(&global_trace, ip, fmt, args); return trace_array_vprintk(&global_trace, ip, fmt, args);
......
...@@ -583,9 +583,7 @@ static __always_inline void trace_clear_recursion(int bit) ...@@ -583,9 +583,7 @@ static __always_inline void trace_clear_recursion(int bit)
static inline struct ring_buffer_iter * static inline struct ring_buffer_iter *
trace_buffer_iter(struct trace_iterator *iter, int cpu) trace_buffer_iter(struct trace_iterator *iter, int cpu)
{ {
if (iter->buffer_iter && iter->buffer_iter[cpu]) return iter->buffer_iter ? iter->buffer_iter[cpu] : NULL;
return iter->buffer_iter[cpu];
return NULL;
} }
int tracer_init(struct tracer *t, struct trace_array *tr); int tracer_init(struct tracer *t, struct trace_array *tr);
......
...@@ -1701,6 +1701,7 @@ static void create_filter_finish(struct filter_parse_error *pe) ...@@ -1701,6 +1701,7 @@ static void create_filter_finish(struct filter_parse_error *pe)
* @filter_str: filter string * @filter_str: filter string
* @set_str: remember @filter_str and enable detailed error in filter * @set_str: remember @filter_str and enable detailed error in filter
* @filterp: out param for created filter (always updated on return) * @filterp: out param for created filter (always updated on return)
* Must be a pointer that references a NULL pointer.
* *
* Creates a filter for @call with @filter_str. If @set_str is %true, * Creates a filter for @call with @filter_str. If @set_str is %true,
* @filter_str is copied and recorded in the new filter. * @filter_str is copied and recorded in the new filter.
...@@ -1718,6 +1719,10 @@ static int create_filter(struct trace_event_call *call, ...@@ -1718,6 +1719,10 @@ static int create_filter(struct trace_event_call *call,
struct filter_parse_error *pe = NULL; struct filter_parse_error *pe = NULL;
int err; int err;
/* filterp must point to NULL */
if (WARN_ON(*filterp))
*filterp = NULL;
err = create_filter_start(filter_string, set_str, &pe, filterp); err = create_filter_start(filter_string, set_str, &pe, filterp);
if (err) if (err)
return err; return err;
......
...@@ -393,7 +393,7 @@ static void hist_err_event(char *str, char *system, char *event, char *var) ...@@ -393,7 +393,7 @@ static void hist_err_event(char *str, char *system, char *event, char *var)
else if (system) else if (system)
snprintf(err, MAX_FILTER_STR_VAL, "%s.%s", system, event); snprintf(err, MAX_FILTER_STR_VAL, "%s.%s", system, event);
else else
strncpy(err, var, MAX_FILTER_STR_VAL); strscpy(err, var, MAX_FILTER_STR_VAL);
hist_err(str, err); hist_err(str, err);
} }
......
...@@ -831,6 +831,7 @@ print_graph_entry_leaf(struct trace_iterator *iter, ...@@ -831,6 +831,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
struct ftrace_graph_ret *graph_ret; struct ftrace_graph_ret *graph_ret;
struct ftrace_graph_ent *call; struct ftrace_graph_ent *call;
unsigned long long duration; unsigned long long duration;
int cpu = iter->cpu;
int i; int i;
graph_ret = &ret_entry->ret; graph_ret = &ret_entry->ret;
...@@ -839,7 +840,6 @@ print_graph_entry_leaf(struct trace_iterator *iter, ...@@ -839,7 +840,6 @@ print_graph_entry_leaf(struct trace_iterator *iter,
if (data) { if (data) {
struct fgraph_cpu_data *cpu_data; struct fgraph_cpu_data *cpu_data;
int cpu = iter->cpu;
cpu_data = per_cpu_ptr(data->cpu_data, cpu); cpu_data = per_cpu_ptr(data->cpu_data, cpu);
...@@ -869,6 +869,9 @@ print_graph_entry_leaf(struct trace_iterator *iter, ...@@ -869,6 +869,9 @@ print_graph_entry_leaf(struct trace_iterator *iter,
trace_seq_printf(s, "%ps();\n", (void *)call->func); trace_seq_printf(s, "%ps();\n", (void *)call->func);
print_graph_irq(iter, graph_ret->func, TRACE_GRAPH_RET,
cpu, iter->ent->pid, flags);
return trace_handle_return(s); return trace_handle_return(s);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment