tracing: Add binary '&' filter for events
authorSteven Rostedt <rostedt@goodmis.org>
Wed, 12 Jun 2013 17:16:25 +0000 (13:16 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 20 Jun 2013 03:30:40 +0000 (23:30 -0400)
commit1a891cf19cdfb645827969cc6aeaeebdefeb87b2
tree7f62a3cd802158e8c29a6fdac1a54f39ba47a454
parentaaf6ac0f0871cb7fc0f28f3a00edf329bc7adc29
tracing: Add binary '&' filter for events

There are some cases when filtering on a set flag of a field of a tracepoint
is useful. But currently the only filtering commands for numbered fields
is ==, !=, <, <=, >, >=. This does not help when you just want to trace if
a specific flag is set. For example:

 > # sudo trace-cmd record -e brcmfmac:brcmf_dbg -f 'level & 0x40000'
 > disable all
 > enable brcmfmac:brcmf_dbg
 > path = /sys/kernel/debug/tracing/events/brcmfmac/brcmf_dbg/enable
 > (level & 0x40000)
 > ^
 > parse_error: Invalid operator
 >

When trying to trace brcmf_dbg when level has its 1 << 18 bit set, the
filter fails to perform.

By allowing a binary '&' operation, this gives the user the ability to
test a bit.

Note, a binary '|' is not added, as it doesn't make sense as fields must
be compared to constants (for now), and ORing a constant will always return
true.

Link: http://lkml.kernel.org/r/1371057385.9844.261.camel@gandalf.local.home
Suggested-by: Arend van Spriel <arend@broadcom.com>
Tested-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Documentation/trace/events.txt
kernel/trace/trace_events_filter.c