diff options
Diffstat (limited to 'kernel/trace/trace_osnoise.c')
| -rw-r--r-- | kernel/trace/trace_osnoise.c | 56 | 
1 files changed, 55 insertions, 1 deletions
diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c index a7e3c24dee13..b61eefe5ccf5 100644 --- a/kernel/trace/trace_osnoise.c +++ b/kernel/trace/trace_osnoise.c @@ -253,6 +253,7 @@ static struct osnoise_data {   */  static bool osnoise_busy; +#ifdef CONFIG_PREEMPT_RT  /*   * Print the osnoise header info.   */ @@ -261,6 +262,35 @@ 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) +		seq_puts(s, "# osnoise is tainted!\n"); +  	seq_puts(s, "#                                _-----=> irqs-off\n");  	seq_puts(s, "#                               / _----=> need-resched\n");  	seq_puts(s, "#                              | / _---=> hardirq/softirq\n"); @@ -279,6 +309,7 @@ static void print_osnoise_headers(struct seq_file *s)  	seq_puts(s, "#              | |         |   ||||      |           |      ");  	seq_puts(s, "       |    |            |      |      |      |      |      |\n");  } +#endif /* CONFIG_PREEMPT_RT */  /*   * osnoise_taint - report an osnoise error. @@ -323,6 +354,24 @@ static void trace_osnoise_sample(struct osnoise_sample *sample)  /*   * 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)  {  	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, "            |                       |\n");  } +#endif /* CONFIG_PREEMPT_RT */  /*   * 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.   */ -static void osnoise_stop_tracing(void) +static __always_inline void osnoise_stop_tracing(void)  {  	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);  }  |