diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2022-05-29 10:31:36 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2022-05-29 10:31:36 -0700 | 
| commit | 76bfd3de34783ceda1fc1d73d0db87361de07ecb (patch) | |
| tree | 468edc58eae863167afa5ff96248a2c7bcc91c9a /kernel/trace/trace_osnoise.c | |
| parent | 09f73a1ab8207481d1d6bd91ab7d0125c6722005 (diff) | |
| parent | b39181f7c6907dc66ff937b74758671fa6ba430c (diff) | |
Merge tag 'trace-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt:
 "The majority of the changes are for fixes and clean ups.
  Notable changes:
   - Rework trace event triggers code to be easier to interact with.
   - Support for embedding bootconfig with the kernel (as suppose to
     having it embedded in initram). This is useful for embedded boards
     without initram disks.
   - Speed up boot by parallelizing the creation of tracefs files.
   - Allow absolute ring buffer timestamps handle timestamps that use
     more than 59 bits.
   - Added new tracing clock "TAI" (International Atomic Time)
   - Have weak functions show up in available_filter_function list as:
     __ftrace_invalid_address___<invalid-offset> instead of using the
     name of the function before it"
* tag 'trace-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (52 commits)
  ftrace: Add FTRACE_MCOUNT_MAX_OFFSET to avoid adding weak function
  tracing: Fix comments for event_trigger_separate_filter()
  x86/traceponit: Fix comment about irq vector tracepoints
  x86,tracing: Remove unused headers
  ftrace: Clean up hash direct_functions on register failures
  tracing: Fix comments of create_filter()
  tracing: Disable kcov on trace_preemptirq.c
  tracing: Initialize integer variable to prevent garbage return value
  ftrace: Fix typo in comment
  ftrace: Remove return value of ftrace_arch_modify_*()
  tracing: Cleanup code by removing init "char *name"
  tracing: Change "char *" string form to "char []"
  tracing/timerlat: Do not wakeup the thread if the trace stops at the IRQ
  tracing/timerlat: Print stacktrace in the IRQ handler if needed
  tracing/timerlat: Notify IRQ new max latency only if stop tracing is set
  kprobes: Fix build errors with CONFIG_KRETPROBES=n
  tracing: Fix return value of trace_pid_write()
  tracing: Fix potential double free in create_var_ref()
  tracing: Use strim() to remove whitespace instead of doing it manually
  ftrace: Deal with error return code of the ftrace_process_locs() function
  ...
Diffstat (limited to 'kernel/trace/trace_osnoise.c')
| -rw-r--r-- | kernel/trace/trace_osnoise.c | 22 | 
1 files changed, 19 insertions, 3 deletions
diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c index afb92e2f0aea..313439920a8c 100644 --- a/kernel/trace/trace_osnoise.c +++ b/kernel/trace/trace_osnoise.c @@ -1578,11 +1578,27 @@ static enum hrtimer_restart timerlat_irq(struct hrtimer *timer)  	trace_timerlat_sample(&s); -	notify_new_max_latency(diff); +	if (osnoise_data.stop_tracing) { +		if (time_to_us(diff) >= osnoise_data.stop_tracing) { + +			/* +			 * At this point, if stop_tracing is set and <= print_stack, +			 * print_stack is set and would be printed in the thread handler. +			 * +			 * Thus, print the stack trace as it is helpful to define the +			 * root cause of an IRQ latency. +			 */ +			if (osnoise_data.stop_tracing <= osnoise_data.print_stack) { +				timerlat_save_stack(0); +				timerlat_dump_stack(time_to_us(diff)); +			} -	if (osnoise_data.stop_tracing) -		if (time_to_us(diff) >= osnoise_data.stop_tracing)  			osnoise_stop_tracing(); +			notify_new_max_latency(diff); + +			return HRTIMER_NORESTART; +		} +	}  	wake_up_process(tlat->kthread);  | 
