Merge tag 'trace-v4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[muen/linux.git] / kernel / trace / Kconfig
index 9a27f146fa1c4b897b5fbe3a47fee40d81a50cd9..c042a455afc6a109a45ae5b58e360d0dec67bcc2 100644 (file)
@@ -47,6 +47,11 @@ config HAVE_FENTRY
        help
          Arch supports the gcc options -pg with -mfentry
 
+config HAVE_NOP_MCOUNT
+       bool
+       help
+         Arch supports the gcc options -pg with -mrecord-mcount and -nop-mcount
+
 config HAVE_C_RECORDMCOUNT
        bool
        help
@@ -82,6 +87,15 @@ config RING_BUFFER_ALLOW_SWAP
         Allow the use of ring_buffer_swap_cpu.
         Adds a very slight overhead to tracing when enabled.
 
+config PREEMPTIRQ_TRACEPOINTS
+       bool
+       depends on TRACE_PREEMPT_TOGGLE || TRACE_IRQFLAGS
+       select TRACING
+       default y
+       help
+         Create preempt/irq toggle tracepoints if needed, so that other parts
+         of the kernel can use them to generate or add hooks to them.
+
 # All tracer options should select GENERIC_TRACER. For those options that are
 # enabled by all tracers (context switch and event tracer) they select TRACING.
 # This allows those options to appear when no other tracer is selected. But the
@@ -155,18 +169,20 @@ config FUNCTION_GRAPH_TRACER
          the return value. This is done by setting the current return
          address on the current task structure into a stack of calls.
 
+config TRACE_PREEMPT_TOGGLE
+       bool
+       help
+         Enables hooks which will be called when preemption is first disabled,
+         and last enabled.
 
 config PREEMPTIRQ_EVENTS
        bool "Enable trace events for preempt and irq disable/enable"
        select TRACE_IRQFLAGS
-       depends on DEBUG_PREEMPT || !PROVE_LOCKING
-       depends on TRACING
+       select TRACE_PREEMPT_TOGGLE if PREEMPT
+       select GENERIC_TRACER
        default n
        help
          Enable tracing of disable and enable events for preemption and irqs.
-         For tracing preempt disable/enable events, DEBUG_PREEMPT must be
-         enabled. For tracing irq disable/enable events, PROVE_LOCKING must
-         be disabled.
 
 config IRQSOFF_TRACER
        bool "Interrupts-off Latency Tracer"
@@ -203,6 +219,7 @@ config PREEMPT_TRACER
        select RING_BUFFER_ALLOW_SWAP
        select TRACER_SNAPSHOT
        select TRACER_SNAPSHOT_PER_CPU_SWAP
+       select TRACE_PREEMPT_TOGGLE
        help
          This option measures the time spent in preemption-off critical
          sections, with microsecond accuracy.
@@ -456,6 +473,26 @@ config KPROBE_EVENTS
          This option is also required by perf-probe subcommand of perf tools.
          If you want to use perf tools, this option is strongly recommended.
 
+config KPROBE_EVENTS_ON_NOTRACE
+       bool "Do NOT protect notrace function from kprobe events"
+       depends on KPROBE_EVENTS
+       depends on KPROBES_ON_FTRACE
+       default n
+       help
+         This is only for the developers who want to debug ftrace itself
+         using kprobe events.
+
+         If kprobes can use ftrace instead of breakpoint, ftrace related
+         functions are protected from kprobe-events to prevent an infinit
+         recursion or any unexpected execution path which leads to a kernel
+         crash.
+
+         This option disables such protection and allows you to put kprobe
+         events on ftrace functions for debugging ftrace by itself.
+         Note that this might let you shoot yourself in the foot.
+
+         If unsure, say N.
+
 config UPROBE_EVENTS
        bool "Enable uprobes-based dynamic events"
        depends on ARCH_SUPPORTS_UPROBES
@@ -687,6 +724,21 @@ config RING_BUFFER_STARTUP_TEST
 
         If unsure, say N
 
+config PREEMPTIRQ_DELAY_TEST
+       tristate "Preempt / IRQ disable delay thread to test latency tracers"
+       depends on m
+       help
+         Select this option to build a test module that can help test latency
+         tracers by executing a preempt or irq disable section with a user
+         configurable delay. The module busy waits for the duration of the
+         critical section.
+
+         For example, the following invocation forces a one-time irq-disabled
+         critical section for 500us:
+         modprobe preemptirq_delay_test test_mode=irq delay=500000
+
+         If unsure, say N
+
 config TRACE_EVAL_MAP_FILE
        bool "Show eval mappings for trace events"
        depends on TRACING