diff options
author | Tom Zanussi <tzanussi@gmail.com> | 2009-04-28 04:04:59 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-29 08:06:11 -0400 |
commit | 8b3725621074040d380664964ffbc40610aef8c6 (patch) | |
tree | 3a78292a08cc9c87653be2e42d084a7d7f5989bf /include | |
parent | a118e4d1402f1349fe3d953493e4168a300a752d (diff) |
tracing/filters: a better event parser
Replace the current event parser hack with a better one. Filters are
no longer specified predicate by predicate, but all at once and can
use parens and any of the following operators:
numeric fields:
==, !=, <, <=, >, >=
string fields:
==, !=
predicates can be combined with the logical operators:
&&, ||
examples:
"common_preempt_count > 4" > filter
"((sig >= 10 && sig < 15) || sig == 17) && comm != bash" > filter
If there was an error, the erroneous string along with an error
message can be seen by looking at the filter e.g.:
((sig >= 10 && sig < 15) || dsig == 17) && comm != bash
^
parse_error: Field not found
Currently the caret for an error always appears at the beginning of
the filter; a real position should be used, but the error message
should be useful even without it.
To clear a filter, '0' can be written to the filter file.
Filters can also be set or cleared for a complete subsystem by writing
the same filter as would be written to an individual event to the
filter file at the root of the subsytem. Note however, that if any
event in the subsystem lacks a field specified in the filter being
set, the set will fail and all filters in the subsytem are
automatically cleared. This change from the previous version was made
because using only the fields that happen to exist for a given event
would most likely result in a meaningless filter.
Because the logical operators are now implemented as predicates, the
maximum number of predicates in a filter was increased from 8 to 16.
[ Impact: add new, extended trace-filter implementation ]
Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Cc: fweisbec@gmail.com
Cc: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <1240905899.6416.121.camel@tropicana>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ftrace_event.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index e61a7403f3d0..5fff40c9ff59 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -112,7 +112,7 @@ struct ftrace_event_call { | |||
112 | #endif | 112 | #endif |
113 | }; | 113 | }; |
114 | 114 | ||
115 | #define MAX_FILTER_PRED 8 | 115 | #define MAX_FILTER_PRED 32 |
116 | #define MAX_FILTER_STR_VAL 128 | 116 | #define MAX_FILTER_STR_VAL 128 |
117 | 117 | ||
118 | extern int init_preds(struct ftrace_event_call *call); | 118 | extern int init_preds(struct ftrace_event_call *call); |