diff options
| -rw-r--r-- | kernel/trace/trace.h | 41 | ||||
| -rw-r--r-- | kernel/trace/trace_events_filter.c | 41 |
2 files changed, 41 insertions, 41 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 2163d185fe28..acaa68060ebc 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) \ | ||
| 804 | static 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) \ | ||
| 832 | static 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 | |||
| 844 | extern struct mutex event_mutex; | 803 | extern struct mutex event_mutex; |
| 845 | extern struct list_head ftrace_events; | 804 | extern struct list_head ftrace_events; |
| 846 | 805 | ||
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c index 93660fbbf629..23245785927f 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) \ | ||
| 125 | static 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) \ | ||
| 153 | static 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 | |||
| 124 | DEFINE_COMPARISON_PRED(s64); | 165 | DEFINE_COMPARISON_PRED(s64); |
| 125 | DEFINE_COMPARISON_PRED(u64); | 166 | DEFINE_COMPARISON_PRED(u64); |
| 126 | DEFINE_COMPARISON_PRED(s32); | 167 | DEFINE_COMPARISON_PRED(s32); |
