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
This commit is contained in:
@@ -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)
|
|||||||
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
|
|||||||
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,
|
|||||||
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 {
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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)
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
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 *
|
|||||||
/*
|
/*
|
||||||
* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user