Commit b88bcc7d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-v5.14-rc5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
 "Fixes and clean ups to tracing:

   - Fix header alignment when PREEMPT_RT is enabled for osnoise tracer

   - Inject "stop" event to see where osnoise stopped the trace

   - Define DYNAMIC_FTRACE_WITH_ARGS as some code had an #ifdef for it

   - Fix erroneous message for bootconfig cmdline parameter

   - Fix crash caused by not found variable in histograms"

* tag 'trace-v5.14-rc5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name
  init: Suppress wrong warning for bootconfig cmdline parameter
  tracing: define needed config DYNAMIC_FTRACE_WITH_ARGS
  trace/osnoise: Print a stop tracing message
  trace/timerlat: Add a header with PREEMPT_RT additional fields
  trace/osnoise: Add a header with PREEMPT_RT additional fields
parents 02a37154 5acce0bf
...@@ -397,6 +397,12 @@ static int __init bootconfig_params(char *param, char *val, ...@@ -397,6 +397,12 @@ static int __init bootconfig_params(char *param, char *val,
return 0; return 0;
} }
static int __init warn_bootconfig(char *str)
{
/* The 'bootconfig' has been handled by bootconfig_params(). */
return 0;
}
static void __init setup_boot_config(void) static void __init setup_boot_config(void)
{ {
static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata; static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
...@@ -475,9 +481,8 @@ static int __init warn_bootconfig(char *str) ...@@ -475,9 +481,8 @@ static int __init warn_bootconfig(char *str)
pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOT_CONFIG is not set.\n"); pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOT_CONFIG is not set.\n");
return 0; return 0;
} }
early_param("bootconfig", warn_bootconfig);
#endif #endif
early_param("bootconfig", warn_bootconfig);
/* Change NUL term back to "=", to make "param" the whole string. */ /* Change NUL term back to "=", to make "param" the whole string. */
static void __init repair_env_string(char *param, char *val) static void __init repair_env_string(char *param, char *val)
......
...@@ -219,6 +219,11 @@ config DYNAMIC_FTRACE_WITH_DIRECT_CALLS ...@@ -219,6 +219,11 @@ config DYNAMIC_FTRACE_WITH_DIRECT_CALLS
depends on DYNAMIC_FTRACE_WITH_REGS depends on DYNAMIC_FTRACE_WITH_REGS
depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
config DYNAMIC_FTRACE_WITH_ARGS
def_bool y
depends on DYNAMIC_FTRACE
depends on HAVE_DYNAMIC_FTRACE_WITH_ARGS
config FUNCTION_PROFILER config FUNCTION_PROFILER
bool "Kernel function profiler" bool "Kernel function profiler"
depends on FUNCTION_TRACER depends on FUNCTION_TRACER
......
...@@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct hist_trigger_data *hist_data, ...@@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct hist_trigger_data *hist_data,
event = data->match_data.event; event = data->match_data.event;
} }
if (!event)
goto free;
/* /*
* At this point, we're looking at a field on another * At this point, we're looking at a field on another
* event. Because we can't modify a hist trigger on * event. Because we can't modify a hist trigger on
......
...@@ -253,10 +253,40 @@ static struct osnoise_data { ...@@ -253,10 +253,40 @@ static struct osnoise_data {
*/ */
static bool osnoise_busy; static bool osnoise_busy;
#ifdef CONFIG_PREEMPT_RT
/* /*
* Print the osnoise header info. * Print the osnoise header info.
*/ */
static void print_osnoise_headers(struct seq_file *s) static void print_osnoise_headers(struct seq_file *s)
{
if (osnoise_data.tainted)
seq_puts(s, "# osnoise is tainted!\n");
seq_puts(s, "# _-------=> irqs-off\n");
seq_puts(s, "# / _------=> need-resched\n");
seq_puts(s, "# | / _-----=> need-resched-lazy\n");
seq_puts(s, "# || / _----=> hardirq/softirq\n");
seq_puts(s, "# ||| / _---=> preempt-depth\n");
seq_puts(s, "# |||| / _--=> preempt-lazy-depth\n");
seq_puts(s, "# ||||| / _-=> migrate-disable\n");
seq_puts(s, "# |||||| / ");
seq_puts(s, " MAX\n");
seq_puts(s, "# ||||| / ");
seq_puts(s, " SINGLE Interference counters:\n");
seq_puts(s, "# ||||||| RUNTIME ");
seq_puts(s, " NOISE %% OF CPU NOISE +-----------------------------+\n");
seq_puts(s, "# TASK-PID CPU# ||||||| TIMESTAMP IN US ");
seq_puts(s, " IN US AVAILABLE IN US HW NMI IRQ SIRQ THREAD\n");
seq_puts(s, "# | | | ||||||| | | ");
seq_puts(s, " | | | | | | | |\n");
}
#else /* CONFIG_PREEMPT_RT */
static void print_osnoise_headers(struct seq_file *s)
{ {
if (osnoise_data.tainted) if (osnoise_data.tainted)
seq_puts(s, "# osnoise is tainted!\n"); seq_puts(s, "# osnoise is tainted!\n");
...@@ -279,6 +309,7 @@ static void print_osnoise_headers(struct seq_file *s) ...@@ -279,6 +309,7 @@ static void print_osnoise_headers(struct seq_file *s)
seq_puts(s, "# | | | |||| | | "); seq_puts(s, "# | | | |||| | | ");
seq_puts(s, " | | | | | | | |\n"); seq_puts(s, " | | | | | | | |\n");
} }
#endif /* CONFIG_PREEMPT_RT */
/* /*
* osnoise_taint - report an osnoise error. * osnoise_taint - report an osnoise error.
...@@ -323,6 +354,24 @@ static void trace_osnoise_sample(struct osnoise_sample *sample) ...@@ -323,6 +354,24 @@ static void trace_osnoise_sample(struct osnoise_sample *sample)
/* /*
* Print the timerlat header info. * Print the timerlat header info.
*/ */
#ifdef CONFIG_PREEMPT_RT
static void print_timerlat_headers(struct seq_file *s)
{
seq_puts(s, "# _-------=> irqs-off\n");
seq_puts(s, "# / _------=> need-resched\n");
seq_puts(s, "# | / _-----=> need-resched-lazy\n");
seq_puts(s, "# || / _----=> hardirq/softirq\n");
seq_puts(s, "# ||| / _---=> preempt-depth\n");
seq_puts(s, "# |||| / _--=> preempt-lazy-depth\n");
seq_puts(s, "# ||||| / _-=> migrate-disable\n");
seq_puts(s, "# |||||| /\n");
seq_puts(s, "# ||||||| ACTIVATION\n");
seq_puts(s, "# TASK-PID CPU# ||||||| TIMESTAMP ID ");
seq_puts(s, " CONTEXT LATENCY\n");
seq_puts(s, "# | | | ||||||| | | ");
seq_puts(s, " | |\n");
}
#else /* CONFIG_PREEMPT_RT */
static void print_timerlat_headers(struct seq_file *s) static void print_timerlat_headers(struct seq_file *s)
{ {
seq_puts(s, "# _-----=> irqs-off\n"); seq_puts(s, "# _-----=> irqs-off\n");
...@@ -336,6 +385,7 @@ static void print_timerlat_headers(struct seq_file *s) ...@@ -336,6 +385,7 @@ static void print_timerlat_headers(struct seq_file *s)
seq_puts(s, "# | | | |||| | | "); seq_puts(s, "# | | | |||| | | ");
seq_puts(s, " | |\n"); seq_puts(s, " | |\n");
} }
#endif /* CONFIG_PREEMPT_RT */
/* /*
* Record an timerlat_sample into the tracer buffer. * Record an timerlat_sample into the tracer buffer.
...@@ -1025,9 +1075,13 @@ diff_osn_sample_stats(struct osnoise_variables *osn_var, struct osnoise_sample * ...@@ -1025,9 +1075,13 @@ diff_osn_sample_stats(struct osnoise_variables *osn_var, struct osnoise_sample *
/* /*
* osnoise_stop_tracing - Stop tracing and the tracer. * osnoise_stop_tracing - Stop tracing and the tracer.
*/ */
static void osnoise_stop_tracing(void) static __always_inline void osnoise_stop_tracing(void)
{ {
struct trace_array *tr = osnoise_trace; struct trace_array *tr = osnoise_trace;
trace_array_printk_buf(tr->array_buffer.buffer, _THIS_IP_,
"stop tracing hit on cpu %d\n", smp_processor_id());
tracer_tracing_off(tr); tracer_tracing_off(tr);
} }
......
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