summaryrefslogtreecommitdiff
path: root/include/linux/ftrace_event.h
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2009-07-20 10:20:53 +0800
committerSteven Rostedt <rostedt@goodmis.org>2009-07-20 13:29:19 -0400
commit1f9963cbb0280e0cd554161e00f1a0eeddbf1ae1 (patch)
tree80e27aa2cf5401fc04f7dbb806ad7e0ec04b6e8c /include/linux/ftrace_event.h
parentff4e9da2330beb8d64498a513d3f9694e941b01a (diff)
downloadlwn-1f9963cbb0280e0cd554161e00f1a0eeddbf1ae1.tar.gz
lwn-1f9963cbb0280e0cd554161e00f1a0eeddbf1ae1.zip
tracing/filters: improve subsystem filter
Currently a subsystem filter should be applicable to all events under the subsystem, and if it failed, all the event filters will be cleared. Those behaviors make subsys filter much less useful: # echo 'vec == 1' > irq/softirq_entry/filter # echo 'irq == 5' > irq/filter bash: echo: write error: Invalid argument # cat irq/softirq_entry/filter none I'd expect it set the filter for irq_handler_entry/exit, and not touch softirq_entry/exit. The basic idea is, try to see if the filter can be applied to which events, and then just apply to the those events: # echo 'vec == 1' > softirq_entry/filter # echo 'irq == 5' > filter # cat irq_handler_entry/filter irq == 5 # cat softirq_entry/filter vec == 1 Changelog for v2: - do some cleanups to address Frederic's comments. Inspired-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <4A63D485.7030703@cn.fujitsu.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include/linux/ftrace_event.h')
-rw-r--r--include/linux/ftrace_event.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 5c093ffc655b..26d3673d5143 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -101,6 +101,8 @@ void trace_current_buffer_discard_commit(struct ring_buffer_event *event);
void tracing_record_cmdline(struct task_struct *tsk);
+struct event_filter;
+
struct ftrace_event_call {
struct list_head list;
char *name;
@@ -116,7 +118,7 @@ struct ftrace_event_call {
int (*define_fields)(void);
struct list_head fields;
int filter_active;
- void *filter;
+ struct event_filter *filter;
void *mod;
#ifdef CONFIG_EVENT_PROFILE