diff options
Diffstat (limited to 'include/trace/ftrace.h')
| -rw-r--r-- | include/trace/ftrace.h | 29 | 
1 files changed, 21 insertions, 8 deletions
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 5c38606613d8..1a8b28db3775 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h @@ -418,6 +418,8 @@ static inline notrace int ftrace_get_offsets_##call(			\   *	struct ftrace_event_file *ftrace_file = __data;   *	struct ftrace_event_call *event_call = ftrace_file->event_call;   *	struct ftrace_data_offsets_<call> __maybe_unused __data_offsets; + *	unsigned long eflags = ftrace_file->flags; + *	enum event_trigger_type __tt = ETT_NONE;   *	struct ring_buffer_event *event;   *	struct ftrace_raw_<call> *entry; <-- defined in stage 1   *	struct ring_buffer *buffer; @@ -425,9 +427,12 @@ static inline notrace int ftrace_get_offsets_##call(			\   *	int __data_size;   *	int pc;   * - *	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, - *		     &ftrace_file->flags)) - *		return; + *	if (!(eflags & FTRACE_EVENT_FL_TRIGGER_COND)) { + *		if (eflags & FTRACE_EVENT_FL_TRIGGER_MODE) + *			event_triggers_call(ftrace_file, NULL); + *		if (eflags & FTRACE_EVENT_FL_SOFT_DISABLED) + *			return; + *	}   *   *	local_save_flags(irq_flags);   *	pc = preempt_count(); @@ -445,8 +450,17 @@ static inline notrace int ftrace_get_offsets_##call(			\   *	{ <assign>; }  <-- Here we assign the entries by the __field and   *			   __array macros.   * - *	if (!filter_check_discard(ftrace_file, entry, buffer, event)) + *	if (eflags & FTRACE_EVENT_FL_TRIGGER_COND) + *		__tt = event_triggers_call(ftrace_file, entry); + * + *	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, + *		     &ftrace_file->flags)) + *		ring_buffer_discard_commit(buffer, event); + *	else if (!filter_check_discard(ftrace_file, entry, buffer, event))   *		trace_buffer_unlock_commit(buffer, event, irq_flags, pc); + * + *	if (__tt) + *		event_triggers_post_call(ftrace_file, __tt);   * }   *   * static struct trace_event ftrace_event_type_<call> = { @@ -539,8 +553,7 @@ ftrace_raw_event_##call(void *__data, proto)				\  	int __data_size;						\  	int pc;								\  									\ -	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT,			\ -		     &ftrace_file->flags))				\ +	if (ftrace_trigger_soft_disabled(ftrace_file))			\  		return;							\  									\  	local_save_flags(irq_flags);					\ @@ -560,8 +573,8 @@ ftrace_raw_event_##call(void *__data, proto)				\  									\  	{ assign; }							\  									\ -	if (!filter_check_discard(ftrace_file, entry, buffer, event))	\ -		trace_buffer_unlock_commit(buffer, event, irq_flags, pc); \ +	event_trigger_unlock_commit(ftrace_file, buffer, event, entry, \ +				    irq_flags, pc);		       \  }  /*   * The ftrace_test_probe is compiled out, it is only here as a build time check  |