aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/trace.h41
-rw-r--r--kernel/trace/trace_events_filter.c41
2 files changed, 41 insertions, 41 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 2163d185fe2..acaa68060eb 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -800,47 +800,6 @@ filter_check_discard(struct ftrace_event_call *call, void *rec,
800 return 0; 800 return 0;
801} 801}
802 802
803#define DEFINE_COMPARISON_PRED(type) \
804static int filter_pred_##type(struct filter_pred *pred, void *event, \
805 int val1, int val2) \
806{ \
807 type *addr = (type *)(event + pred->offset); \
808 type val = (type)pred->val; \
809 int match = 0; \
810 \
811 switch (pred->op) { \
812 case OP_LT: \
813 match = (*addr < val); \
814 break; \
815 case OP_LE: \
816 match = (*addr <= val); \
817 break; \
818 case OP_GT: \
819 match = (*addr > val); \
820 break; \
821 case OP_GE: \
822 match = (*addr >= val); \
823 break; \
824 default: \
825 break; \
826 } \
827 \
828 return match; \
829}
830
831#define DEFINE_EQUALITY_PRED(size) \
832static int filter_pred_##size(struct filter_pred *pred, void *event, \
833 int val1, int val2) \
834{ \
835 u##size *addr = (u##size *)(event + pred->offset); \
836 u##size val = (u##size)pred->val; \
837 int match; \
838 \
839 match = (val == *addr) ^ pred->not; \
840 \
841 return match; \
842}
843
844extern struct mutex event_mutex; 803extern struct mutex event_mutex;
845extern struct list_head ftrace_events; 804extern struct list_head ftrace_events;
846 805
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 93660fbbf62..23245785927 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -121,6 +121,47 @@ struct filter_parse_state {
121 } operand; 121 } operand;
122}; 122};
123 123
124#define DEFINE_COMPARISON_PRED(type) \
125static int filter_pred_##type(struct filter_pred *pred, void *event, \
126 int val1, int val2) \
127{ \
128 type *addr = (type *)(event + pred->offset); \
129 type val = (type)pred->val; \
130 int match = 0; \
131 \
132 switch (pred->op) { \
133 case OP_LT: \
134 match = (*addr < val); \
135 break; \
136 case OP_LE: \
137 match = (*addr <= val); \
138 break; \
139 case OP_GT: \
140 match = (*addr > val); \
141 break; \
142 case OP_GE: \
143 match = (*addr >= val); \
144 break; \
145 default: \
146 break; \
147 } \
148 \
149 return match; \
150}
151
152#define DEFINE_EQUALITY_PRED(size) \
153static int filter_pred_##size(struct filter_pred *pred, void *event, \
154 int val1, int val2) \
155{ \
156 u##size *addr = (u##size *)(event + pred->offset); \
157 u##size val = (u##size)pred->val; \
158 int match; \
159 \
160 match = (val == *addr) ^ pred->not; \
161 \
162 return match; \
163}
164
124DEFINE_COMPARISON_PRED(s64); 165DEFINE_COMPARISON_PRED(s64);
125DEFINE_COMPARISON_PRED(u64); 166DEFINE_COMPARISON_PRED(u64);
126DEFINE_COMPARISON_PRED(s32); 167DEFINE_COMPARISON_PRED(s32);