tracing: Rewrite filter logic to be simpler and faster
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 9 Mar 2018 18:19:28 +0000 (13:19 -0500)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Wed, 14 Mar 2018 16:35:39 +0000 (12:35 -0400)
commit80765597bc587feae8dbc8ce97a0f32e12a6e625
tree0a3823a6531798777eed0317f59660ac5495a73b
parent478325f188657d0e503d1f88cdaf516c792352c5
tracing: Rewrite filter logic to be simpler and faster

Al Viro reviewed the filter logic of ftrace trace events and found it to be
very troubling. It creates a binary tree based on the logic operators and
walks it during tracing. He sent myself and Tom Zanussi a long explanation
(and formal proof) of how to do the string parsing better and end up with a
program array that can be simply iterated to come up with the correct
results.

I took his ideas and his pseudo code and rewrote the filter logic based on
them. In doing so, I was able to remove a lot of code, and have a much more
condensed filter logic in the process. I wrote a very long comment
describing the methadology that Al proposed in my own words. For more info
on how this works, read the comment above predicate_parse().

Suggested-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.h
kernel/trace/trace_events_filter.c