Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f71130de authored by Li Zefan's avatar Li Zefan Committed by Steven Rostedt
Browse files

tracing: Add a helper function for event print functions

Move duplicate code in event print functions to a helper function.

This shrinks the size of the kernel by ~13K.

   text    data     bss     dec     hex filename
6596137 1743966 10138672        18478775        119f6b7 vmlinux.o.old
6583002 1743849 10138672        18465523        119c2f3 vmlinux.o.new

Link: http://lkml.kernel.org/r/51258746.2060304@huawei.com



Signed-off-by: default avatarLi Zefan <lizefan@huawei.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 15693458
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -38,6 +38,12 @@ const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
const char *ftrace_print_hex_seq(struct trace_seq *p,
				 const unsigned char *buf, int len);

struct trace_iterator;
struct trace_event;

int ftrace_raw_output_prep(struct trace_iterator *iter,
			   struct trace_event *event);

/*
 * The trace entry - the most basic unit of tracing. This is what
 * is printed in the end as a single line in the trace output, such as:
@@ -95,8 +101,6 @@ enum trace_iter_flags {
};


struct trace_event;

typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
				      int flags, struct trace_event *event);

+6 −17
Original line number Diff line number Diff line
@@ -227,28 +227,17 @@ static notrace enum print_line_t \
ftrace_raw_output_##call(struct trace_iterator *iter, int flags,	\
			 struct trace_event *trace_event)		\
{									\
	struct ftrace_event_call *event;				\
	struct trace_seq *s = &iter->seq;				\
	struct trace_seq __maybe_unused *p = &iter->tmp_seq;		\
	struct ftrace_raw_##call *field;				\
	struct trace_entry *entry;					\
	struct trace_seq *p = &iter->tmp_seq;				\
	int ret;							\
									\
	event = container_of(trace_event, struct ftrace_event_call,	\
			     event);					\
									\
	entry = iter->ent;						\
	field = (typeof(field))iter->ent;				\
									\
	if (entry->type != event->event.type) {				\
		WARN_ON_ONCE(1);					\
		return TRACE_TYPE_UNHANDLED;				\
	}								\
									\
	field = (typeof(field))entry;					\
									\
	trace_seq_init(p);						\
	ret = trace_seq_printf(s, "%s: ", event->name);			\
	ret = ftrace_raw_output_prep(iter, trace_event);		\
	if (ret)							\
		return ret;						\
									\
	ret = trace_seq_printf(s, print);				\
	if (!ret)							\
		return TRACE_TYPE_PARTIAL_LINE;				\
+26 −0
Original line number Diff line number Diff line
@@ -397,6 +397,32 @@ ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
}
EXPORT_SYMBOL(ftrace_print_hex_seq);

int ftrace_raw_output_prep(struct trace_iterator *iter,
			   struct trace_event *trace_event)
{
	struct ftrace_event_call *event;
	struct trace_seq *s = &iter->seq;
	struct trace_seq *p = &iter->tmp_seq;
	struct trace_entry *entry;
	int ret;

	event = container_of(trace_event, struct ftrace_event_call, event);
	entry = iter->ent;

	if (entry->type != event->event.type) {
		WARN_ON_ONCE(1);
		return TRACE_TYPE_UNHANDLED;
	}

	trace_seq_init(p);
	ret = trace_seq_printf(s, "%s: ", event->name);
	if (!ret)
		return TRACE_TYPE_PARTIAL_LINE;

	return 0;
}
EXPORT_SYMBOL(ftrace_raw_output_prep);

#ifdef CONFIG_KRETPROBES
static inline const char *kretprobed(const char *name)
{