Commit 726721a5 authored by Tom Zanussi's avatar Tom Zanussi Committed by Steven Rostedt (VMware)
Browse files

tracing: Move synthetic events to a separate file

With the addition of the in-kernel synthetic event API, synthetic
events are no longer specifically tied to the histogram triggers.

The synthetic event code is also making trace_event_hist.c very
bloated, so for those reasons, move it to a separate file,
trace_events_synth.c, along with a new trace_synth.h header file.

Because synthetic events are now independent from hist triggers, add a
new CONFIG_SYNTH_EVENTS config option, and have CONFIG_HIST_TRIGGERS
select it, and have CONFIG_SYNTH_EVENT_GEN_TEST depend on it.

Link: http://lkml.kernel.org/r/4d1fa1f85ed5982706ac44844ac92451dcb04715.1590693308.git.zanussi@kernel.org



Signed-off-by: default avatarTom Zanussi <zanussi@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 5bbf959d
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -623,12 +623,30 @@ config TRACING_MAP
	  generally used outside of that context, and is normally
	  selected by tracers that use it.

config SYNTH_EVENTS
	bool "Synthetic trace events"
	select TRACING
	select DYNAMIC_EVENTS
	default n
	help
	  Synthetic events are user-defined trace events that can be
	  used to combine data from other trace events or in fact any
	  data source.  Synthetic events can be generated indirectly
	  via the trace() action of histogram triggers or directly
	  by way of an in-kernel API.

	  See Documentation/trace/events.rst or
	  Documentation/trace/histogram.rst for details and examples.

	  If in doubt, say N.

config HIST_TRIGGERS
	bool "Histogram triggers"
	depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
	select TRACING_MAP
	select TRACING
	select DYNAMIC_EVENTS
	select SYNTH_EVENTS
	default n
	help
	  Hist triggers allow one or more arbitrary trace event fields
@@ -824,7 +842,7 @@ config PREEMPTIRQ_DELAY_TEST

config SYNTH_EVENT_GEN_TEST
	tristate "Test module for in-kernel synthetic event generation"
	depends on HIST_TRIGGERS
	depends on SYNTH_EVENTS
	help
          This option creates a test module to check the base
          functionality of in-kernel synthetic event definition and
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ endif
obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o
obj-$(CONFIG_EVENT_TRACING) += trace_events_trigger.o
obj-$(CONFIG_TRACE_EVENT_INJECT) += trace_events_inject.o
obj-$(CONFIG_SYNTH_EVENTS) += trace_events_synth.o
obj-$(CONFIG_HIST_TRIGGERS) += trace_events_hist.o
obj-$(CONFIG_BPF_EVENTS) += bpf_trace.o
obj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe.o
+144 −1927

File changed.

Preview size limit exceeded, changes collapsed.

+1789 −0

File added.

Preview size limit exceeded, changes collapsed.

+36 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
#ifndef __TRACE_SYNTH_H
#define __TRACE_SYNTH_H

#include "trace_dynevent.h"

#define SYNTH_SYSTEM		"synthetic"
#define SYNTH_FIELDS_MAX	32

#define STR_VAR_LEN_MAX		32 /* must be multiple of sizeof(u64) */

struct synth_field {
	char *type;
	char *name;
	size_t size;
	unsigned int offset;
	bool is_signed;
	bool is_string;
};

struct synth_event {
	struct dyn_event			devent;
	int					ref;
	char					*name;
	struct synth_field			**fields;
	unsigned int				n_fields;
	unsigned int				n_u64;
	struct trace_event_class		class;
	struct trace_event_call			call;
	struct tracepoint			*tp;
	struct module				*mod;
};

extern struct synth_event *find_synth_event(const char *name);

#endif /* __TRACE_SYNTH_H */