Merge most of tag 'tags/exynos-dt' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6.git] / kernel / trace / trace_events_filter.c
blob97daa8cf958df8e73c9fa8090f89cbaf4e63893e
1 /*
2 * trace_events_filter - generic event filtering
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 * Copyright (C) 2009 Tom Zanussi <tzanussi@gmail.com>
21 #include <linux/module.h>
22 #include <linux/ctype.h>
23 #include <linux/mutex.h>
24 #include <linux/perf_event.h>
25 #include <linux/slab.h>
27 #include "trace.h"
28 #include "trace_output.h"
30 #define DEFAULT_SYS_FILTER_MESSAGE \
31 "### global filter ###\n" \
32 "# Use this to set filters for multiple events.\n" \
33 "# Only events with the given fields will be affected.\n" \
34 "# If no events are modified, an error message will be displayed here"
36 enum filter_op_ids
38 OP_OR,
39 OP_AND,
40 OP_GLOB,
41 OP_NE,
42 OP_EQ,
43 OP_LT,
44 OP_LE,
45 OP_GT,
46 OP_GE,
47 OP_BAND,
48 OP_NONE,
49 OP_OPEN_PAREN,
52 struct filter_op {
53 int id;
54 char *string;
55 int precedence;
58 /* Order must be the same as enum filter_op_ids above */
59 static struct filter_op filter_ops[] = {
60 { OP_OR, "||", 1 },
61 { OP_AND, "&&", 2 },
62 { OP_GLOB, "~", 4 },
63 { OP_NE, "!=", 4 },
64 { OP_EQ, "==", 4 },
65 { OP_LT, "<", 5 },
66 { OP_LE, "<=", 5 },
67 { OP_GT, ">", 5 },
68 { OP_GE, ">=", 5 },
69 { OP_BAND, "&", 6 },
70 { OP_NONE, "OP_NONE", 0 },
71 { OP_OPEN_PAREN, "(", 0 },
74 enum {
75 FILT_ERR_NONE,
76 FILT_ERR_INVALID_OP,
77 FILT_ERR_UNBALANCED_PAREN,
78 FILT_ERR_TOO_MANY_OPERANDS,
79 FILT_ERR_OPERAND_TOO_LONG,
80 FILT_ERR_FIELD_NOT_FOUND,
81 FILT_ERR_ILLEGAL_FIELD_OP,
82 FILT_ERR_ILLEGAL_INTVAL,
83 FILT_ERR_BAD_SUBSYS_FILTER,
84 FILT_ERR_TOO_MANY_PREDS,
85 FILT_ERR_MISSING_FIELD,
86 FILT_ERR_INVALID_FILTER,
87 FILT_ERR_IP_FIELD_ONLY,
90 static char *err_text[] = {
91 "No error",
92 "Invalid operator",
93 "Unbalanced parens",
94 "Too many operands",
95 "Operand too long",
96 "Field not found",
97 "Illegal operation for field type",
98 "Illegal integer value",
99 "Couldn't find or set field in one of a subsystem's events",
100 "Too many terms in predicate expression",
101 "Missing field name and/or value",
102 "Meaningless filter expression",
103 "Only 'ip' field is supported for function trace",
106 struct opstack_op {
107 int op;
108 struct list_head list;
111 struct postfix_elt {
112 int op;
113 char *operand;
114 struct list_head list;
117 struct filter_parse_state {
118 struct filter_op *ops;
119 struct list_head opstack;
120 struct list_head postfix;
121 int lasterr;
122 int lasterr_pos;
124 struct {
125 char *string;
126 unsigned int cnt;
127 unsigned int tail;
128 } infix;
130 struct {
131 char string[MAX_FILTER_STR_VAL];
132 int pos;
133 unsigned int tail;
134 } operand;
137 struct pred_stack {
138 struct filter_pred **preds;
139 int index;
142 #define DEFINE_COMPARISON_PRED(type) \
143 static int filter_pred_##type(struct filter_pred *pred, void *event) \
145 type *addr = (type *)(event + pred->offset); \
146 type val = (type)pred->val; \
147 int match = 0; \
149 switch (pred->op) { \
150 case OP_LT: \
151 match = (*addr < val); \
152 break; \
153 case OP_LE: \
154 match = (*addr <= val); \
155 break; \
156 case OP_GT: \
157 match = (*addr > val); \
158 break; \
159 case OP_GE: \
160 match = (*addr >= val); \
161 break; \
162 case OP_BAND: \
163 match = (*addr & val); \
164 break; \
165 default: \
166 break; \
169 return match; \
172 #define DEFINE_EQUALITY_PRED(size) \
173 static int filter_pred_##size(struct filter_pred *pred, void *event) \
175 u##size *addr = (u##size *)(event + pred->offset); \
176 u##size val = (u##size)pred->val; \
177 int match; \
179 match = (val == *addr) ^ pred->not; \
181 return match; \
184 DEFINE_COMPARISON_PRED(s64);
185 DEFINE_COMPARISON_PRED(u64);
186 DEFINE_COMPARISON_PRED(s32);
187 DEFINE_COMPARISON_PRED(u32);
188 DEFINE_COMPARISON_PRED(s16);
189 DEFINE_COMPARISON_PRED(u16);
190 DEFINE_COMPARISON_PRED(s8);
191 DEFINE_COMPARISON_PRED(u8);
193 DEFINE_EQUALITY_PRED(64);
194 DEFINE_EQUALITY_PRED(32);
195 DEFINE_EQUALITY_PRED(16);
196 DEFINE_EQUALITY_PRED(8);
198 /* Filter predicate for fixed sized arrays of characters */
199 static int filter_pred_string(struct filter_pred *pred, void *event)
201 char *addr = (char *)(event + pred->offset);
202 int cmp, match;
204 cmp = pred->regex.match(addr, &pred->regex, pred->regex.field_len);
206 match = cmp ^ pred->not;
208 return match;
211 /* Filter predicate for char * pointers */
212 static int filter_pred_pchar(struct filter_pred *pred, void *event)
214 char **addr = (char **)(event + pred->offset);
215 int cmp, match;
216 int len = strlen(*addr) + 1; /* including tailing '\0' */
218 cmp = pred->regex.match(*addr, &pred->regex, len);
220 match = cmp ^ pred->not;
222 return match;
226 * Filter predicate for dynamic sized arrays of characters.
227 * These are implemented through a list of strings at the end
228 * of the entry.
229 * Also each of these strings have a field in the entry which
230 * contains its offset from the beginning of the entry.
231 * We have then first to get this field, dereference it
232 * and add it to the address of the entry, and at last we have
233 * the address of the string.
235 static int filter_pred_strloc(struct filter_pred *pred, void *event)
237 u32 str_item = *(u32 *)(event + pred->offset);
238 int str_loc = str_item & 0xffff;
239 int str_len = str_item >> 16;
240 char *addr = (char *)(event + str_loc);
241 int cmp, match;
243 cmp = pred->regex.match(addr, &pred->regex, str_len);
245 match = cmp ^ pred->not;
247 return match;
250 static int filter_pred_none(struct filter_pred *pred, void *event)
252 return 0;
256 * regex_match_foo - Basic regex callbacks
258 * @str: the string to be searched
259 * @r: the regex structure containing the pattern string
260 * @len: the length of the string to be searched (including '\0')
262 * Note:
263 * - @str might not be NULL-terminated if it's of type DYN_STRING
264 * or STATIC_STRING
267 static int regex_match_full(char *str, struct regex *r, int len)
269 if (strncmp(str, r->pattern, len) == 0)
270 return 1;
271 return 0;
274 static int regex_match_front(char *str, struct regex *r, int len)
276 if (strncmp(str, r->pattern, r->len) == 0)
277 return 1;
278 return 0;
281 static int regex_match_middle(char *str, struct regex *r, int len)
283 if (strnstr(str, r->pattern, len))
284 return 1;
285 return 0;
288 static int regex_match_end(char *str, struct regex *r, int len)
290 int strlen = len - 1;
292 if (strlen >= r->len &&
293 memcmp(str + strlen - r->len, r->pattern, r->len) == 0)
294 return 1;
295 return 0;
299 * filter_parse_regex - parse a basic regex
300 * @buff: the raw regex
301 * @len: length of the regex
302 * @search: will point to the beginning of the string to compare
303 * @not: tell whether the match will have to be inverted
305 * This passes in a buffer containing a regex and this function will
306 * set search to point to the search part of the buffer and
307 * return the type of search it is (see enum above).
308 * This does modify buff.
310 * Returns enum type.
311 * search returns the pointer to use for comparison.
312 * not returns 1 if buff started with a '!'
313 * 0 otherwise.
315 enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not)
317 int type = MATCH_FULL;
318 int i;
320 if (buff[0] == '!') {
321 *not = 1;
322 buff++;
323 len--;
324 } else
325 *not = 0;
327 *search = buff;
329 for (i = 0; i < len; i++) {
330 if (buff[i] == '*') {
331 if (!i) {
332 *search = buff + 1;
333 type = MATCH_END_ONLY;
334 } else {
335 if (type == MATCH_END_ONLY)
336 type = MATCH_MIDDLE_ONLY;
337 else
338 type = MATCH_FRONT_ONLY;
339 buff[i] = 0;
340 break;
345 return type;
348 static void filter_build_regex(struct filter_pred *pred)
350 struct regex *r = &pred->regex;
351 char *search;
352 enum regex_type type = MATCH_FULL;
353 int not = 0;
355 if (pred->op == OP_GLOB) {
356 type = filter_parse_regex(r->pattern, r->len, &search, &not);
357 r->len = strlen(search);
358 memmove(r->pattern, search, r->len+1);
361 switch (type) {
362 case MATCH_FULL:
363 r->match = regex_match_full;
364 break;
365 case MATCH_FRONT_ONLY:
366 r->match = regex_match_front;
367 break;
368 case MATCH_MIDDLE_ONLY:
369 r->match = regex_match_middle;
370 break;
371 case MATCH_END_ONLY:
372 r->match = regex_match_end;
373 break;
376 pred->not ^= not;
379 enum move_type {
380 MOVE_DOWN,
381 MOVE_UP_FROM_LEFT,
382 MOVE_UP_FROM_RIGHT
385 static struct filter_pred *
386 get_pred_parent(struct filter_pred *pred, struct filter_pred *preds,
387 int index, enum move_type *move)
389 if (pred->parent & FILTER_PRED_IS_RIGHT)
390 *move = MOVE_UP_FROM_RIGHT;
391 else
392 *move = MOVE_UP_FROM_LEFT;
393 pred = &preds[pred->parent & ~FILTER_PRED_IS_RIGHT];
395 return pred;
398 enum walk_return {
399 WALK_PRED_ABORT,
400 WALK_PRED_PARENT,
401 WALK_PRED_DEFAULT,
404 typedef int (*filter_pred_walkcb_t) (enum move_type move,
405 struct filter_pred *pred,
406 int *err, void *data);
408 static int walk_pred_tree(struct filter_pred *preds,
409 struct filter_pred *root,
410 filter_pred_walkcb_t cb, void *data)
412 struct filter_pred *pred = root;
413 enum move_type move = MOVE_DOWN;
414 int done = 0;
416 if (!preds)
417 return -EINVAL;
419 do {
420 int err = 0, ret;
422 ret = cb(move, pred, &err, data);
423 if (ret == WALK_PRED_ABORT)
424 return err;
425 if (ret == WALK_PRED_PARENT)
426 goto get_parent;
428 switch (move) {
429 case MOVE_DOWN:
430 if (pred->left != FILTER_PRED_INVALID) {
431 pred = &preds[pred->left];
432 continue;
434 goto get_parent;
435 case MOVE_UP_FROM_LEFT:
436 pred = &preds[pred->right];
437 move = MOVE_DOWN;
438 continue;
439 case MOVE_UP_FROM_RIGHT:
440 get_parent:
441 if (pred == root)
442 break;
443 pred = get_pred_parent(pred, preds,
444 pred->parent,
445 &move);
446 continue;
448 done = 1;
449 } while (!done);
451 /* We are fine. */
452 return 0;
456 * A series of AND or ORs where found together. Instead of
457 * climbing up and down the tree branches, an array of the
458 * ops were made in order of checks. We can just move across
459 * the array and short circuit if needed.
461 static int process_ops(struct filter_pred *preds,
462 struct filter_pred *op, void *rec)
464 struct filter_pred *pred;
465 int match = 0;
466 int type;
467 int i;
470 * Micro-optimization: We set type to true if op
471 * is an OR and false otherwise (AND). Then we
472 * just need to test if the match is equal to
473 * the type, and if it is, we can short circuit the
474 * rest of the checks:
476 * if ((match && op->op == OP_OR) ||
477 * (!match && op->op == OP_AND))
478 * return match;
480 type = op->op == OP_OR;
482 for (i = 0; i < op->val; i++) {
483 pred = &preds[op->ops[i]];
484 if (!WARN_ON_ONCE(!pred->fn))
485 match = pred->fn(pred, rec);
486 if (!!match == type)
487 return match;
489 return match;
492 struct filter_match_preds_data {
493 struct filter_pred *preds;
494 int match;
495 void *rec;
498 static int filter_match_preds_cb(enum move_type move, struct filter_pred *pred,
499 int *err, void *data)
501 struct filter_match_preds_data *d = data;
503 *err = 0;
504 switch (move) {
505 case MOVE_DOWN:
506 /* only AND and OR have children */
507 if (pred->left != FILTER_PRED_INVALID) {
508 /* If ops is set, then it was folded. */
509 if (!pred->ops)
510 return WALK_PRED_DEFAULT;
511 /* We can treat folded ops as a leaf node */
512 d->match = process_ops(d->preds, pred, d->rec);
513 } else {
514 if (!WARN_ON_ONCE(!pred->fn))
515 d->match = pred->fn(pred, d->rec);
518 return WALK_PRED_PARENT;
519 case MOVE_UP_FROM_LEFT:
521 * Check for short circuits.
523 * Optimization: !!match == (pred->op == OP_OR)
524 * is the same as:
525 * if ((match && pred->op == OP_OR) ||
526 * (!match && pred->op == OP_AND))
528 if (!!d->match == (pred->op == OP_OR))
529 return WALK_PRED_PARENT;
530 break;
531 case MOVE_UP_FROM_RIGHT:
532 break;
535 return WALK_PRED_DEFAULT;
538 /* return 1 if event matches, 0 otherwise (discard) */
539 int filter_match_preds(struct event_filter *filter, void *rec)
541 struct filter_pred *preds;
542 struct filter_pred *root;
543 struct filter_match_preds_data data = {
544 /* match is currently meaningless */
545 .match = -1,
546 .rec = rec,
548 int n_preds, ret;
550 /* no filter is considered a match */
551 if (!filter)
552 return 1;
554 n_preds = filter->n_preds;
555 if (!n_preds)
556 return 1;
559 * n_preds, root and filter->preds are protect with preemption disabled.
561 root = rcu_dereference_sched(filter->root);
562 if (!root)
563 return 1;
565 data.preds = preds = rcu_dereference_sched(filter->preds);
566 ret = walk_pred_tree(preds, root, filter_match_preds_cb, &data);
567 WARN_ON(ret);
568 return data.match;
570 EXPORT_SYMBOL_GPL(filter_match_preds);
572 static void parse_error(struct filter_parse_state *ps, int err, int pos)
574 ps->lasterr = err;
575 ps->lasterr_pos = pos;
578 static void remove_filter_string(struct event_filter *filter)
580 if (!filter)
581 return;
583 kfree(filter->filter_string);
584 filter->filter_string = NULL;
587 static int replace_filter_string(struct event_filter *filter,
588 char *filter_string)
590 kfree(filter->filter_string);
591 filter->filter_string = kstrdup(filter_string, GFP_KERNEL);
592 if (!filter->filter_string)
593 return -ENOMEM;
595 return 0;
598 static int append_filter_string(struct event_filter *filter,
599 char *string)
601 int newlen;
602 char *new_filter_string;
604 BUG_ON(!filter->filter_string);
605 newlen = strlen(filter->filter_string) + strlen(string) + 1;
606 new_filter_string = kmalloc(newlen, GFP_KERNEL);
607 if (!new_filter_string)
608 return -ENOMEM;
610 strcpy(new_filter_string, filter->filter_string);
611 strcat(new_filter_string, string);
612 kfree(filter->filter_string);
613 filter->filter_string = new_filter_string;
615 return 0;
618 static void append_filter_err(struct filter_parse_state *ps,
619 struct event_filter *filter)
621 int pos = ps->lasterr_pos;
622 char *buf, *pbuf;
624 buf = (char *)__get_free_page(GFP_TEMPORARY);
625 if (!buf)
626 return;
628 append_filter_string(filter, "\n");
629 memset(buf, ' ', PAGE_SIZE);
630 if (pos > PAGE_SIZE - 128)
631 pos = 0;
632 buf[pos] = '^';
633 pbuf = &buf[pos] + 1;
635 sprintf(pbuf, "\nparse_error: %s\n", err_text[ps->lasterr]);
636 append_filter_string(filter, buf);
637 free_page((unsigned long) buf);
640 /* caller must hold event_mutex */
641 void print_event_filter(struct ftrace_event_call *call, struct trace_seq *s)
643 struct event_filter *filter = call->filter;
645 if (filter && filter->filter_string)
646 trace_seq_printf(s, "%s\n", filter->filter_string);
647 else
648 trace_seq_puts(s, "none\n");
651 void print_subsystem_event_filter(struct event_subsystem *system,
652 struct trace_seq *s)
654 struct event_filter *filter;
656 mutex_lock(&event_mutex);
657 filter = system->filter;
658 if (filter && filter->filter_string)
659 trace_seq_printf(s, "%s\n", filter->filter_string);
660 else
661 trace_seq_puts(s, DEFAULT_SYS_FILTER_MESSAGE "\n");
662 mutex_unlock(&event_mutex);
665 static int __alloc_pred_stack(struct pred_stack *stack, int n_preds)
667 stack->preds = kcalloc(n_preds + 1, sizeof(*stack->preds), GFP_KERNEL);
668 if (!stack->preds)
669 return -ENOMEM;
670 stack->index = n_preds;
671 return 0;
674 static void __free_pred_stack(struct pred_stack *stack)
676 kfree(stack->preds);
677 stack->index = 0;
680 static int __push_pred_stack(struct pred_stack *stack,
681 struct filter_pred *pred)
683 int index = stack->index;
685 if (WARN_ON(index == 0))
686 return -ENOSPC;
688 stack->preds[--index] = pred;
689 stack->index = index;
690 return 0;
693 static struct filter_pred *
694 __pop_pred_stack(struct pred_stack *stack)
696 struct filter_pred *pred;
697 int index = stack->index;
699 pred = stack->preds[index++];
700 if (!pred)
701 return NULL;
703 stack->index = index;
704 return pred;
707 static int filter_set_pred(struct event_filter *filter,
708 int idx,
709 struct pred_stack *stack,
710 struct filter_pred *src)
712 struct filter_pred *dest = &filter->preds[idx];
713 struct filter_pred *left;
714 struct filter_pred *right;
716 *dest = *src;
717 dest->index = idx;
719 if (dest->op == OP_OR || dest->op == OP_AND) {
720 right = __pop_pred_stack(stack);
721 left = __pop_pred_stack(stack);
722 if (!left || !right)
723 return -EINVAL;
725 * If both children can be folded
726 * and they are the same op as this op or a leaf,
727 * then this op can be folded.
729 if (left->index & FILTER_PRED_FOLD &&
730 (left->op == dest->op ||
731 left->left == FILTER_PRED_INVALID) &&
732 right->index & FILTER_PRED_FOLD &&
733 (right->op == dest->op ||
734 right->left == FILTER_PRED_INVALID))
735 dest->index |= FILTER_PRED_FOLD;
737 dest->left = left->index & ~FILTER_PRED_FOLD;
738 dest->right = right->index & ~FILTER_PRED_FOLD;
739 left->parent = dest->index & ~FILTER_PRED_FOLD;
740 right->parent = dest->index | FILTER_PRED_IS_RIGHT;
741 } else {
743 * Make dest->left invalid to be used as a quick
744 * way to know this is a leaf node.
746 dest->left = FILTER_PRED_INVALID;
748 /* All leafs allow folding the parent ops. */
749 dest->index |= FILTER_PRED_FOLD;
752 return __push_pred_stack(stack, dest);
755 static void __free_preds(struct event_filter *filter)
757 int i;
759 if (filter->preds) {
760 for (i = 0; i < filter->n_preds; i++)
761 kfree(filter->preds[i].ops);
762 kfree(filter->preds);
763 filter->preds = NULL;
765 filter->a_preds = 0;
766 filter->n_preds = 0;
769 static void filter_disable(struct ftrace_event_call *call)
771 call->flags &= ~TRACE_EVENT_FL_FILTERED;
774 static void __free_filter(struct event_filter *filter)
776 if (!filter)
777 return;
779 __free_preds(filter);
780 kfree(filter->filter_string);
781 kfree(filter);
785 * Called when destroying the ftrace_event_call.
786 * The call is being freed, so we do not need to worry about
787 * the call being currently used. This is for module code removing
788 * the tracepoints from within it.
790 void destroy_preds(struct ftrace_event_call *call)
792 __free_filter(call->filter);
793 call->filter = NULL;
796 static struct event_filter *__alloc_filter(void)
798 struct event_filter *filter;
800 filter = kzalloc(sizeof(*filter), GFP_KERNEL);
801 return filter;
804 static int __alloc_preds(struct event_filter *filter, int n_preds)
806 struct filter_pred *pred;
807 int i;
809 if (filter->preds)
810 __free_preds(filter);
812 filter->preds = kcalloc(n_preds, sizeof(*filter->preds), GFP_KERNEL);
814 if (!filter->preds)
815 return -ENOMEM;
817 filter->a_preds = n_preds;
818 filter->n_preds = 0;
820 for (i = 0; i < n_preds; i++) {
821 pred = &filter->preds[i];
822 pred->fn = filter_pred_none;
825 return 0;
828 static void filter_free_subsystem_preds(struct event_subsystem *system)
830 struct ftrace_event_call *call;
832 list_for_each_entry(call, &ftrace_events, list) {
833 if (strcmp(call->class->system, system->name) != 0)
834 continue;
836 filter_disable(call);
837 remove_filter_string(call->filter);
841 static void filter_free_subsystem_filters(struct event_subsystem *system)
843 struct ftrace_event_call *call;
845 list_for_each_entry(call, &ftrace_events, list) {
846 if (strcmp(call->class->system, system->name) != 0)
847 continue;
848 __free_filter(call->filter);
849 call->filter = NULL;
853 static int filter_add_pred(struct filter_parse_state *ps,
854 struct event_filter *filter,
855 struct filter_pred *pred,
856 struct pred_stack *stack)
858 int err;
860 if (WARN_ON(filter->n_preds == filter->a_preds)) {
861 parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
862 return -ENOSPC;
865 err = filter_set_pred(filter, filter->n_preds, stack, pred);
866 if (err)
867 return err;
869 filter->n_preds++;
871 return 0;
874 int filter_assign_type(const char *type)
876 if (strstr(type, "__data_loc") && strstr(type, "char"))
877 return FILTER_DYN_STRING;
879 if (strchr(type, '[') && strstr(type, "char"))
880 return FILTER_STATIC_STRING;
882 return FILTER_OTHER;
885 static bool is_function_field(struct ftrace_event_field *field)
887 return field->filter_type == FILTER_TRACE_FN;
890 static bool is_string_field(struct ftrace_event_field *field)
892 return field->filter_type == FILTER_DYN_STRING ||
893 field->filter_type == FILTER_STATIC_STRING ||
894 field->filter_type == FILTER_PTR_STRING;
897 static int is_legal_op(struct ftrace_event_field *field, int op)
899 if (is_string_field(field) &&
900 (op != OP_EQ && op != OP_NE && op != OP_GLOB))
901 return 0;
902 if (!is_string_field(field) && op == OP_GLOB)
903 return 0;
905 return 1;
908 static filter_pred_fn_t select_comparison_fn(int op, int field_size,
909 int field_is_signed)
911 filter_pred_fn_t fn = NULL;
913 switch (field_size) {
914 case 8:
915 if (op == OP_EQ || op == OP_NE)
916 fn = filter_pred_64;
917 else if (field_is_signed)
918 fn = filter_pred_s64;
919 else
920 fn = filter_pred_u64;
921 break;
922 case 4:
923 if (op == OP_EQ || op == OP_NE)
924 fn = filter_pred_32;
925 else if (field_is_signed)
926 fn = filter_pred_s32;
927 else
928 fn = filter_pred_u32;
929 break;
930 case 2:
931 if (op == OP_EQ || op == OP_NE)
932 fn = filter_pred_16;
933 else if (field_is_signed)
934 fn = filter_pred_s16;
935 else
936 fn = filter_pred_u16;
937 break;
938 case 1:
939 if (op == OP_EQ || op == OP_NE)
940 fn = filter_pred_8;
941 else if (field_is_signed)
942 fn = filter_pred_s8;
943 else
944 fn = filter_pred_u8;
945 break;
948 return fn;
951 static int init_pred(struct filter_parse_state *ps,
952 struct ftrace_event_field *field,
953 struct filter_pred *pred)
956 filter_pred_fn_t fn = filter_pred_none;
957 unsigned long long val;
958 int ret;
960 pred->offset = field->offset;
962 if (!is_legal_op(field, pred->op)) {
963 parse_error(ps, FILT_ERR_ILLEGAL_FIELD_OP, 0);
964 return -EINVAL;
967 if (is_string_field(field)) {
968 filter_build_regex(pred);
970 if (field->filter_type == FILTER_STATIC_STRING) {
971 fn = filter_pred_string;
972 pred->regex.field_len = field->size;
973 } else if (field->filter_type == FILTER_DYN_STRING)
974 fn = filter_pred_strloc;
975 else
976 fn = filter_pred_pchar;
977 } else if (is_function_field(field)) {
978 if (strcmp(field->name, "ip")) {
979 parse_error(ps, FILT_ERR_IP_FIELD_ONLY, 0);
980 return -EINVAL;
982 } else {
983 if (field->is_signed)
984 ret = kstrtoll(pred->regex.pattern, 0, &val);
985 else
986 ret = kstrtoull(pred->regex.pattern, 0, &val);
987 if (ret) {
988 parse_error(ps, FILT_ERR_ILLEGAL_INTVAL, 0);
989 return -EINVAL;
991 pred->val = val;
993 fn = select_comparison_fn(pred->op, field->size,
994 field->is_signed);
995 if (!fn) {
996 parse_error(ps, FILT_ERR_INVALID_OP, 0);
997 return -EINVAL;
1001 if (pred->op == OP_NE)
1002 pred->not = 1;
1004 pred->fn = fn;
1005 return 0;
1008 static void parse_init(struct filter_parse_state *ps,
1009 struct filter_op *ops,
1010 char *infix_string)
1012 memset(ps, '\0', sizeof(*ps));
1014 ps->infix.string = infix_string;
1015 ps->infix.cnt = strlen(infix_string);
1016 ps->ops = ops;
1018 INIT_LIST_HEAD(&ps->opstack);
1019 INIT_LIST_HEAD(&ps->postfix);
1022 static char infix_next(struct filter_parse_state *ps)
1024 ps->infix.cnt--;
1026 return ps->infix.string[ps->infix.tail++];
1029 static char infix_peek(struct filter_parse_state *ps)
1031 if (ps->infix.tail == strlen(ps->infix.string))
1032 return 0;
1034 return ps->infix.string[ps->infix.tail];
1037 static void infix_advance(struct filter_parse_state *ps)
1039 ps->infix.cnt--;
1040 ps->infix.tail++;
1043 static inline int is_precedence_lower(struct filter_parse_state *ps,
1044 int a, int b)
1046 return ps->ops[a].precedence < ps->ops[b].precedence;
1049 static inline int is_op_char(struct filter_parse_state *ps, char c)
1051 int i;
1053 for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1054 if (ps->ops[i].string[0] == c)
1055 return 1;
1058 return 0;
1061 static int infix_get_op(struct filter_parse_state *ps, char firstc)
1063 char nextc = infix_peek(ps);
1064 char opstr[3];
1065 int i;
1067 opstr[0] = firstc;
1068 opstr[1] = nextc;
1069 opstr[2] = '\0';
1071 for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1072 if (!strcmp(opstr, ps->ops[i].string)) {
1073 infix_advance(ps);
1074 return ps->ops[i].id;
1078 opstr[1] = '\0';
1080 for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1081 if (!strcmp(opstr, ps->ops[i].string))
1082 return ps->ops[i].id;
1085 return OP_NONE;
1088 static inline void clear_operand_string(struct filter_parse_state *ps)
1090 memset(ps->operand.string, '\0', MAX_FILTER_STR_VAL);
1091 ps->operand.tail = 0;
1094 static inline int append_operand_char(struct filter_parse_state *ps, char c)
1096 if (ps->operand.tail == MAX_FILTER_STR_VAL - 1)
1097 return -EINVAL;
1099 ps->operand.string[ps->operand.tail++] = c;
1101 return 0;
1104 static int filter_opstack_push(struct filter_parse_state *ps, int op)
1106 struct opstack_op *opstack_op;
1108 opstack_op = kmalloc(sizeof(*opstack_op), GFP_KERNEL);
1109 if (!opstack_op)
1110 return -ENOMEM;
1112 opstack_op->op = op;
1113 list_add(&opstack_op->list, &ps->opstack);
1115 return 0;
1118 static int filter_opstack_empty(struct filter_parse_state *ps)
1120 return list_empty(&ps->opstack);
1123 static int filter_opstack_top(struct filter_parse_state *ps)
1125 struct opstack_op *opstack_op;
1127 if (filter_opstack_empty(ps))
1128 return OP_NONE;
1130 opstack_op = list_first_entry(&ps->opstack, struct opstack_op, list);
1132 return opstack_op->op;
1135 static int filter_opstack_pop(struct filter_parse_state *ps)
1137 struct opstack_op *opstack_op;
1138 int op;
1140 if (filter_opstack_empty(ps))
1141 return OP_NONE;
1143 opstack_op = list_first_entry(&ps->opstack, struct opstack_op, list);
1144 op = opstack_op->op;
1145 list_del(&opstack_op->list);
1147 kfree(opstack_op);
1149 return op;
1152 static void filter_opstack_clear(struct filter_parse_state *ps)
1154 while (!filter_opstack_empty(ps))
1155 filter_opstack_pop(ps);
1158 static char *curr_operand(struct filter_parse_state *ps)
1160 return ps->operand.string;
1163 static int postfix_append_operand(struct filter_parse_state *ps, char *operand)
1165 struct postfix_elt *elt;
1167 elt = kmalloc(sizeof(*elt), GFP_KERNEL);
1168 if (!elt)
1169 return -ENOMEM;
1171 elt->op = OP_NONE;
1172 elt->operand = kstrdup(operand, GFP_KERNEL);
1173 if (!elt->operand) {
1174 kfree(elt);
1175 return -ENOMEM;
1178 list_add_tail(&elt->list, &ps->postfix);
1180 return 0;
1183 static int postfix_append_op(struct filter_parse_state *ps, int op)
1185 struct postfix_elt *elt;
1187 elt = kmalloc(sizeof(*elt), GFP_KERNEL);
1188 if (!elt)
1189 return -ENOMEM;
1191 elt->op = op;
1192 elt->operand = NULL;
1194 list_add_tail(&elt->list, &ps->postfix);
1196 return 0;
1199 static void postfix_clear(struct filter_parse_state *ps)
1201 struct postfix_elt *elt;
1203 while (!list_empty(&ps->postfix)) {
1204 elt = list_first_entry(&ps->postfix, struct postfix_elt, list);
1205 list_del(&elt->list);
1206 kfree(elt->operand);
1207 kfree(elt);
1211 static int filter_parse(struct filter_parse_state *ps)
1213 int in_string = 0;
1214 int op, top_op;
1215 char ch;
1217 while ((ch = infix_next(ps))) {
1218 if (ch == '"') {
1219 in_string ^= 1;
1220 continue;
1223 if (in_string)
1224 goto parse_operand;
1226 if (isspace(ch))
1227 continue;
1229 if (is_op_char(ps, ch)) {
1230 op = infix_get_op(ps, ch);
1231 if (op == OP_NONE) {
1232 parse_error(ps, FILT_ERR_INVALID_OP, 0);
1233 return -EINVAL;
1236 if (strlen(curr_operand(ps))) {
1237 postfix_append_operand(ps, curr_operand(ps));
1238 clear_operand_string(ps);
1241 while (!filter_opstack_empty(ps)) {
1242 top_op = filter_opstack_top(ps);
1243 if (!is_precedence_lower(ps, top_op, op)) {
1244 top_op = filter_opstack_pop(ps);
1245 postfix_append_op(ps, top_op);
1246 continue;
1248 break;
1251 filter_opstack_push(ps, op);
1252 continue;
1255 if (ch == '(') {
1256 filter_opstack_push(ps, OP_OPEN_PAREN);
1257 continue;
1260 if (ch == ')') {
1261 if (strlen(curr_operand(ps))) {
1262 postfix_append_operand(ps, curr_operand(ps));
1263 clear_operand_string(ps);
1266 top_op = filter_opstack_pop(ps);
1267 while (top_op != OP_NONE) {
1268 if (top_op == OP_OPEN_PAREN)
1269 break;
1270 postfix_append_op(ps, top_op);
1271 top_op = filter_opstack_pop(ps);
1273 if (top_op == OP_NONE) {
1274 parse_error(ps, FILT_ERR_UNBALANCED_PAREN, 0);
1275 return -EINVAL;
1277 continue;
1279 parse_operand:
1280 if (append_operand_char(ps, ch)) {
1281 parse_error(ps, FILT_ERR_OPERAND_TOO_LONG, 0);
1282 return -EINVAL;
1286 if (strlen(curr_operand(ps)))
1287 postfix_append_operand(ps, curr_operand(ps));
1289 while (!filter_opstack_empty(ps)) {
1290 top_op = filter_opstack_pop(ps);
1291 if (top_op == OP_NONE)
1292 break;
1293 if (top_op == OP_OPEN_PAREN) {
1294 parse_error(ps, FILT_ERR_UNBALANCED_PAREN, 0);
1295 return -EINVAL;
1297 postfix_append_op(ps, top_op);
1300 return 0;
1303 static struct filter_pred *create_pred(struct filter_parse_state *ps,
1304 struct ftrace_event_call *call,
1305 int op, char *operand1, char *operand2)
1307 struct ftrace_event_field *field;
1308 static struct filter_pred pred;
1310 memset(&pred, 0, sizeof(pred));
1311 pred.op = op;
1313 if (op == OP_AND || op == OP_OR)
1314 return &pred;
1316 if (!operand1 || !operand2) {
1317 parse_error(ps, FILT_ERR_MISSING_FIELD, 0);
1318 return NULL;
1321 field = trace_find_event_field(call, operand1);
1322 if (!field) {
1323 parse_error(ps, FILT_ERR_FIELD_NOT_FOUND, 0);
1324 return NULL;
1327 strcpy(pred.regex.pattern, operand2);
1328 pred.regex.len = strlen(pred.regex.pattern);
1329 pred.field = field;
1330 return init_pred(ps, field, &pred) ? NULL : &pred;
1333 static int check_preds(struct filter_parse_state *ps)
1335 int n_normal_preds = 0, n_logical_preds = 0;
1336 struct postfix_elt *elt;
1338 list_for_each_entry(elt, &ps->postfix, list) {
1339 if (elt->op == OP_NONE)
1340 continue;
1342 if (elt->op == OP_AND || elt->op == OP_OR) {
1343 n_logical_preds++;
1344 continue;
1346 n_normal_preds++;
1349 if (!n_normal_preds || n_logical_preds >= n_normal_preds) {
1350 parse_error(ps, FILT_ERR_INVALID_FILTER, 0);
1351 return -EINVAL;
1354 return 0;
1357 static int count_preds(struct filter_parse_state *ps)
1359 struct postfix_elt *elt;
1360 int n_preds = 0;
1362 list_for_each_entry(elt, &ps->postfix, list) {
1363 if (elt->op == OP_NONE)
1364 continue;
1365 n_preds++;
1368 return n_preds;
1371 struct check_pred_data {
1372 int count;
1373 int max;
1376 static int check_pred_tree_cb(enum move_type move, struct filter_pred *pred,
1377 int *err, void *data)
1379 struct check_pred_data *d = data;
1381 if (WARN_ON(d->count++ > d->max)) {
1382 *err = -EINVAL;
1383 return WALK_PRED_ABORT;
1385 return WALK_PRED_DEFAULT;
1389 * The tree is walked at filtering of an event. If the tree is not correctly
1390 * built, it may cause an infinite loop. Check here that the tree does
1391 * indeed terminate.
1393 static int check_pred_tree(struct event_filter *filter,
1394 struct filter_pred *root)
1396 struct check_pred_data data = {
1398 * The max that we can hit a node is three times.
1399 * Once going down, once coming up from left, and
1400 * once coming up from right. This is more than enough
1401 * since leafs are only hit a single time.
1403 .max = 3 * filter->n_preds,
1404 .count = 0,
1407 return walk_pred_tree(filter->preds, root,
1408 check_pred_tree_cb, &data);
1411 static int count_leafs_cb(enum move_type move, struct filter_pred *pred,
1412 int *err, void *data)
1414 int *count = data;
1416 if ((move == MOVE_DOWN) &&
1417 (pred->left == FILTER_PRED_INVALID))
1418 (*count)++;
1420 return WALK_PRED_DEFAULT;
1423 static int count_leafs(struct filter_pred *preds, struct filter_pred *root)
1425 int count = 0, ret;
1427 ret = walk_pred_tree(preds, root, count_leafs_cb, &count);
1428 WARN_ON(ret);
1429 return count;
1432 struct fold_pred_data {
1433 struct filter_pred *root;
1434 int count;
1435 int children;
1438 static int fold_pred_cb(enum move_type move, struct filter_pred *pred,
1439 int *err, void *data)
1441 struct fold_pred_data *d = data;
1442 struct filter_pred *root = d->root;
1444 if (move != MOVE_DOWN)
1445 return WALK_PRED_DEFAULT;
1446 if (pred->left != FILTER_PRED_INVALID)
1447 return WALK_PRED_DEFAULT;
1449 if (WARN_ON(d->count == d->children)) {
1450 *err = -EINVAL;
1451 return WALK_PRED_ABORT;
1454 pred->index &= ~FILTER_PRED_FOLD;
1455 root->ops[d->count++] = pred->index;
1456 return WALK_PRED_DEFAULT;
1459 static int fold_pred(struct filter_pred *preds, struct filter_pred *root)
1461 struct fold_pred_data data = {
1462 .root = root,
1463 .count = 0,
1465 int children;
1467 /* No need to keep the fold flag */
1468 root->index &= ~FILTER_PRED_FOLD;
1470 /* If the root is a leaf then do nothing */
1471 if (root->left == FILTER_PRED_INVALID)
1472 return 0;
1474 /* count the children */
1475 children = count_leafs(preds, &preds[root->left]);
1476 children += count_leafs(preds, &preds[root->right]);
1478 root->ops = kcalloc(children, sizeof(*root->ops), GFP_KERNEL);
1479 if (!root->ops)
1480 return -ENOMEM;
1482 root->val = children;
1483 data.children = children;
1484 return walk_pred_tree(preds, root, fold_pred_cb, &data);
1487 static int fold_pred_tree_cb(enum move_type move, struct filter_pred *pred,
1488 int *err, void *data)
1490 struct filter_pred *preds = data;
1492 if (move != MOVE_DOWN)
1493 return WALK_PRED_DEFAULT;
1494 if (!(pred->index & FILTER_PRED_FOLD))
1495 return WALK_PRED_DEFAULT;
1497 *err = fold_pred(preds, pred);
1498 if (*err)
1499 return WALK_PRED_ABORT;
1501 /* eveyrhing below is folded, continue with parent */
1502 return WALK_PRED_PARENT;
1506 * To optimize the processing of the ops, if we have several "ors" or
1507 * "ands" together, we can put them in an array and process them all
1508 * together speeding up the filter logic.
1510 static int fold_pred_tree(struct event_filter *filter,
1511 struct filter_pred *root)
1513 return walk_pred_tree(filter->preds, root, fold_pred_tree_cb,
1514 filter->preds);
1517 static int replace_preds(struct ftrace_event_call *call,
1518 struct event_filter *filter,
1519 struct filter_parse_state *ps,
1520 char *filter_string,
1521 bool dry_run)
1523 char *operand1 = NULL, *operand2 = NULL;
1524 struct filter_pred *pred;
1525 struct filter_pred *root;
1526 struct postfix_elt *elt;
1527 struct pred_stack stack = { }; /* init to NULL */
1528 int err;
1529 int n_preds = 0;
1531 n_preds = count_preds(ps);
1532 if (n_preds >= MAX_FILTER_PRED) {
1533 parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
1534 return -ENOSPC;
1537 err = check_preds(ps);
1538 if (err)
1539 return err;
1541 if (!dry_run) {
1542 err = __alloc_pred_stack(&stack, n_preds);
1543 if (err)
1544 return err;
1545 err = __alloc_preds(filter, n_preds);
1546 if (err)
1547 goto fail;
1550 n_preds = 0;
1551 list_for_each_entry(elt, &ps->postfix, list) {
1552 if (elt->op == OP_NONE) {
1553 if (!operand1)
1554 operand1 = elt->operand;
1555 else if (!operand2)
1556 operand2 = elt->operand;
1557 else {
1558 parse_error(ps, FILT_ERR_TOO_MANY_OPERANDS, 0);
1559 err = -EINVAL;
1560 goto fail;
1562 continue;
1565 if (WARN_ON(n_preds++ == MAX_FILTER_PRED)) {
1566 parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
1567 err = -ENOSPC;
1568 goto fail;
1571 pred = create_pred(ps, call, elt->op, operand1, operand2);
1572 if (!pred) {
1573 err = -EINVAL;
1574 goto fail;
1577 if (!dry_run) {
1578 err = filter_add_pred(ps, filter, pred, &stack);
1579 if (err)
1580 goto fail;
1583 operand1 = operand2 = NULL;
1586 if (!dry_run) {
1587 /* We should have one item left on the stack */
1588 pred = __pop_pred_stack(&stack);
1589 if (!pred)
1590 return -EINVAL;
1591 /* This item is where we start from in matching */
1592 root = pred;
1593 /* Make sure the stack is empty */
1594 pred = __pop_pred_stack(&stack);
1595 if (WARN_ON(pred)) {
1596 err = -EINVAL;
1597 filter->root = NULL;
1598 goto fail;
1600 err = check_pred_tree(filter, root);
1601 if (err)
1602 goto fail;
1604 /* Optimize the tree */
1605 err = fold_pred_tree(filter, root);
1606 if (err)
1607 goto fail;
1609 /* We don't set root until we know it works */
1610 barrier();
1611 filter->root = root;
1614 err = 0;
1615 fail:
1616 __free_pred_stack(&stack);
1617 return err;
1620 struct filter_list {
1621 struct list_head list;
1622 struct event_filter *filter;
1625 static int replace_system_preds(struct event_subsystem *system,
1626 struct filter_parse_state *ps,
1627 char *filter_string)
1629 struct ftrace_event_call *call;
1630 struct filter_list *filter_item;
1631 struct filter_list *tmp;
1632 LIST_HEAD(filter_list);
1633 bool fail = true;
1634 int err;
1636 list_for_each_entry(call, &ftrace_events, list) {
1638 if (strcmp(call->class->system, system->name) != 0)
1639 continue;
1642 * Try to see if the filter can be applied
1643 * (filter arg is ignored on dry_run)
1645 err = replace_preds(call, NULL, ps, filter_string, true);
1646 if (err)
1647 call->flags |= TRACE_EVENT_FL_NO_SET_FILTER;
1648 else
1649 call->flags &= ~TRACE_EVENT_FL_NO_SET_FILTER;
1652 list_for_each_entry(call, &ftrace_events, list) {
1653 struct event_filter *filter;
1655 if (strcmp(call->class->system, system->name) != 0)
1656 continue;
1658 if (call->flags & TRACE_EVENT_FL_NO_SET_FILTER)
1659 continue;
1661 filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL);
1662 if (!filter_item)
1663 goto fail_mem;
1665 list_add_tail(&filter_item->list, &filter_list);
1667 filter_item->filter = __alloc_filter();
1668 if (!filter_item->filter)
1669 goto fail_mem;
1670 filter = filter_item->filter;
1672 /* Can only fail on no memory */
1673 err = replace_filter_string(filter, filter_string);
1674 if (err)
1675 goto fail_mem;
1677 err = replace_preds(call, filter, ps, filter_string, false);
1678 if (err) {
1679 filter_disable(call);
1680 parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
1681 append_filter_err(ps, filter);
1682 } else
1683 call->flags |= TRACE_EVENT_FL_FILTERED;
1685 * Regardless of if this returned an error, we still
1686 * replace the filter for the call.
1688 filter = call->filter;
1689 rcu_assign_pointer(call->filter, filter_item->filter);
1690 filter_item->filter = filter;
1692 fail = false;
1695 if (fail)
1696 goto fail;
1699 * The calls can still be using the old filters.
1700 * Do a synchronize_sched() to ensure all calls are
1701 * done with them before we free them.
1703 synchronize_sched();
1704 list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1705 __free_filter(filter_item->filter);
1706 list_del(&filter_item->list);
1707 kfree(filter_item);
1709 return 0;
1710 fail:
1711 /* No call succeeded */
1712 list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1713 list_del(&filter_item->list);
1714 kfree(filter_item);
1716 parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
1717 return -EINVAL;
1718 fail_mem:
1719 /* If any call succeeded, we still need to sync */
1720 if (!fail)
1721 synchronize_sched();
1722 list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1723 __free_filter(filter_item->filter);
1724 list_del(&filter_item->list);
1725 kfree(filter_item);
1727 return -ENOMEM;
1730 static int create_filter_start(char *filter_str, bool set_str,
1731 struct filter_parse_state **psp,
1732 struct event_filter **filterp)
1734 struct event_filter *filter;
1735 struct filter_parse_state *ps = NULL;
1736 int err = 0;
1738 WARN_ON_ONCE(*psp || *filterp);
1740 /* allocate everything, and if any fails, free all and fail */
1741 filter = __alloc_filter();
1742 if (filter && set_str)
1743 err = replace_filter_string(filter, filter_str);
1745 ps = kzalloc(sizeof(*ps), GFP_KERNEL);
1747 if (!filter || !ps || err) {
1748 kfree(ps);
1749 __free_filter(filter);
1750 return -ENOMEM;
1753 /* we're committed to creating a new filter */
1754 *filterp = filter;
1755 *psp = ps;
1757 parse_init(ps, filter_ops, filter_str);
1758 err = filter_parse(ps);
1759 if (err && set_str)
1760 append_filter_err(ps, filter);
1761 return err;
1764 static void create_filter_finish(struct filter_parse_state *ps)
1766 if (ps) {
1767 filter_opstack_clear(ps);
1768 postfix_clear(ps);
1769 kfree(ps);
1774 * create_filter - create a filter for a ftrace_event_call
1775 * @call: ftrace_event_call to create a filter for
1776 * @filter_str: filter string
1777 * @set_str: remember @filter_str and enable detailed error in filter
1778 * @filterp: out param for created filter (always updated on return)
1780 * Creates a filter for @call with @filter_str. If @set_str is %true,
1781 * @filter_str is copied and recorded in the new filter.
1783 * On success, returns 0 and *@filterp points to the new filter. On
1784 * failure, returns -errno and *@filterp may point to %NULL or to a new
1785 * filter. In the latter case, the returned filter contains error
1786 * information if @set_str is %true and the caller is responsible for
1787 * freeing it.
1789 static int create_filter(struct ftrace_event_call *call,
1790 char *filter_str, bool set_str,
1791 struct event_filter **filterp)
1793 struct event_filter *filter = NULL;
1794 struct filter_parse_state *ps = NULL;
1795 int err;
1797 err = create_filter_start(filter_str, set_str, &ps, &filter);
1798 if (!err) {
1799 err = replace_preds(call, filter, ps, filter_str, false);
1800 if (err && set_str)
1801 append_filter_err(ps, filter);
1803 create_filter_finish(ps);
1805 *filterp = filter;
1806 return err;
1810 * create_system_filter - create a filter for an event_subsystem
1811 * @system: event_subsystem to create a filter for
1812 * @filter_str: filter string
1813 * @filterp: out param for created filter (always updated on return)
1815 * Identical to create_filter() except that it creates a subsystem filter
1816 * and always remembers @filter_str.
1818 static int create_system_filter(struct event_subsystem *system,
1819 char *filter_str, struct event_filter **filterp)
1821 struct event_filter *filter = NULL;
1822 struct filter_parse_state *ps = NULL;
1823 int err;
1825 err = create_filter_start(filter_str, true, &ps, &filter);
1826 if (!err) {
1827 err = replace_system_preds(system, ps, filter_str);
1828 if (!err) {
1829 /* System filters just show a default message */
1830 kfree(filter->filter_string);
1831 filter->filter_string = NULL;
1832 } else {
1833 append_filter_err(ps, filter);
1836 create_filter_finish(ps);
1838 *filterp = filter;
1839 return err;
1842 /* caller must hold event_mutex */
1843 int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
1845 struct event_filter *filter;
1846 int err;
1848 if (!strcmp(strstrip(filter_string), "0")) {
1849 filter_disable(call);
1850 filter = call->filter;
1851 if (!filter)
1852 return 0;
1853 RCU_INIT_POINTER(call->filter, NULL);
1854 /* Make sure the filter is not being used */
1855 synchronize_sched();
1856 __free_filter(filter);
1857 return 0;
1860 err = create_filter(call, filter_string, true, &filter);
1863 * Always swap the call filter with the new filter
1864 * even if there was an error. If there was an error
1865 * in the filter, we disable the filter and show the error
1866 * string
1868 if (filter) {
1869 struct event_filter *tmp = call->filter;
1871 if (!err)
1872 call->flags |= TRACE_EVENT_FL_FILTERED;
1873 else
1874 filter_disable(call);
1876 rcu_assign_pointer(call->filter, filter);
1878 if (tmp) {
1879 /* Make sure the call is done with the filter */
1880 synchronize_sched();
1881 __free_filter(tmp);
1885 return err;
1888 int apply_subsystem_event_filter(struct ftrace_subsystem_dir *dir,
1889 char *filter_string)
1891 struct event_subsystem *system = dir->subsystem;
1892 struct event_filter *filter;
1893 int err = 0;
1895 mutex_lock(&event_mutex);
1897 /* Make sure the system still has events */
1898 if (!dir->nr_events) {
1899 err = -ENODEV;
1900 goto out_unlock;
1903 if (!strcmp(strstrip(filter_string), "0")) {
1904 filter_free_subsystem_preds(system);
1905 remove_filter_string(system->filter);
1906 filter = system->filter;
1907 system->filter = NULL;
1908 /* Ensure all filters are no longer used */
1909 synchronize_sched();
1910 filter_free_subsystem_filters(system);
1911 __free_filter(filter);
1912 goto out_unlock;
1915 err = create_system_filter(system, filter_string, &filter);
1916 if (filter) {
1918 * No event actually uses the system filter
1919 * we can free it without synchronize_sched().
1921 __free_filter(system->filter);
1922 system->filter = filter;
1924 out_unlock:
1925 mutex_unlock(&event_mutex);
1927 return err;
1930 #ifdef CONFIG_PERF_EVENTS
1932 void ftrace_profile_free_filter(struct perf_event *event)
1934 struct event_filter *filter = event->filter;
1936 event->filter = NULL;
1937 __free_filter(filter);
1940 struct function_filter_data {
1941 struct ftrace_ops *ops;
1942 int first_filter;
1943 int first_notrace;
1946 #ifdef CONFIG_FUNCTION_TRACER
1947 static char **
1948 ftrace_function_filter_re(char *buf, int len, int *count)
1950 char *str, *sep, **re;
1952 str = kstrndup(buf, len, GFP_KERNEL);
1953 if (!str)
1954 return NULL;
1957 * The argv_split function takes white space
1958 * as a separator, so convert ',' into spaces.
1960 while ((sep = strchr(str, ',')))
1961 *sep = ' ';
1963 re = argv_split(GFP_KERNEL, str, count);
1964 kfree(str);
1965 return re;
1968 static int ftrace_function_set_regexp(struct ftrace_ops *ops, int filter,
1969 int reset, char *re, int len)
1971 int ret;
1973 if (filter)
1974 ret = ftrace_set_filter(ops, re, len, reset);
1975 else
1976 ret = ftrace_set_notrace(ops, re, len, reset);
1978 return ret;
1981 static int __ftrace_function_set_filter(int filter, char *buf, int len,
1982 struct function_filter_data *data)
1984 int i, re_cnt, ret = -EINVAL;
1985 int *reset;
1986 char **re;
1988 reset = filter ? &data->first_filter : &data->first_notrace;
1991 * The 'ip' field could have multiple filters set, separated
1992 * either by space or comma. We first cut the filter and apply
1993 * all pieces separatelly.
1995 re = ftrace_function_filter_re(buf, len, &re_cnt);
1996 if (!re)
1997 return -EINVAL;
1999 for (i = 0; i < re_cnt; i++) {
2000 ret = ftrace_function_set_regexp(data->ops, filter, *reset,
2001 re[i], strlen(re[i]));
2002 if (ret)
2003 break;
2005 if (*reset)
2006 *reset = 0;
2009 argv_free(re);
2010 return ret;
2013 static int ftrace_function_check_pred(struct filter_pred *pred, int leaf)
2015 struct ftrace_event_field *field = pred->field;
2017 if (leaf) {
2019 * Check the leaf predicate for function trace, verify:
2020 * - only '==' and '!=' is used
2021 * - the 'ip' field is used
2023 if ((pred->op != OP_EQ) && (pred->op != OP_NE))
2024 return -EINVAL;
2026 if (strcmp(field->name, "ip"))
2027 return -EINVAL;
2028 } else {
2030 * Check the non leaf predicate for function trace, verify:
2031 * - only '||' is used
2033 if (pred->op != OP_OR)
2034 return -EINVAL;
2037 return 0;
2040 static int ftrace_function_set_filter_cb(enum move_type move,
2041 struct filter_pred *pred,
2042 int *err, void *data)
2044 /* Checking the node is valid for function trace. */
2045 if ((move != MOVE_DOWN) ||
2046 (pred->left != FILTER_PRED_INVALID)) {
2047 *err = ftrace_function_check_pred(pred, 0);
2048 } else {
2049 *err = ftrace_function_check_pred(pred, 1);
2050 if (*err)
2051 return WALK_PRED_ABORT;
2053 *err = __ftrace_function_set_filter(pred->op == OP_EQ,
2054 pred->regex.pattern,
2055 pred->regex.len,
2056 data);
2059 return (*err) ? WALK_PRED_ABORT : WALK_PRED_DEFAULT;
2062 static int ftrace_function_set_filter(struct perf_event *event,
2063 struct event_filter *filter)
2065 struct function_filter_data data = {
2066 .first_filter = 1,
2067 .first_notrace = 1,
2068 .ops = &event->ftrace_ops,
2071 return walk_pred_tree(filter->preds, filter->root,
2072 ftrace_function_set_filter_cb, &data);
2074 #else
2075 static int ftrace_function_set_filter(struct perf_event *event,
2076 struct event_filter *filter)
2078 return -ENODEV;
2080 #endif /* CONFIG_FUNCTION_TRACER */
2082 int ftrace_profile_set_filter(struct perf_event *event, int event_id,
2083 char *filter_str)
2085 int err;
2086 struct event_filter *filter;
2087 struct ftrace_event_call *call;
2089 mutex_lock(&event_mutex);
2091 call = event->tp_event;
2093 err = -EINVAL;
2094 if (!call)
2095 goto out_unlock;
2097 err = -EEXIST;
2098 if (event->filter)
2099 goto out_unlock;
2101 err = create_filter(call, filter_str, false, &filter);
2102 if (err)
2103 goto free_filter;
2105 if (ftrace_event_is_function(call))
2106 err = ftrace_function_set_filter(event, filter);
2107 else
2108 event->filter = filter;
2110 free_filter:
2111 if (err || ftrace_event_is_function(call))
2112 __free_filter(filter);
2114 out_unlock:
2115 mutex_unlock(&event_mutex);
2117 return err;
2120 #endif /* CONFIG_PERF_EVENTS */
2122 #ifdef CONFIG_FTRACE_STARTUP_TEST
2124 #include <linux/types.h>
2125 #include <linux/tracepoint.h>
2127 #define CREATE_TRACE_POINTS
2128 #include "trace_events_filter_test.h"
2130 #define DATA_REC(m, va, vb, vc, vd, ve, vf, vg, vh, nvisit) \
2132 .filter = FILTER, \
2133 .rec = { .a = va, .b = vb, .c = vc, .d = vd, \
2134 .e = ve, .f = vf, .g = vg, .h = vh }, \
2135 .match = m, \
2136 .not_visited = nvisit, \
2138 #define YES 1
2139 #define NO 0
2141 static struct test_filter_data_t {
2142 char *filter;
2143 struct ftrace_raw_ftrace_test_filter rec;
2144 int match;
2145 char *not_visited;
2146 } test_filter_data[] = {
2147 #define FILTER "a == 1 && b == 1 && c == 1 && d == 1 && " \
2148 "e == 1 && f == 1 && g == 1 && h == 1"
2149 DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, ""),
2150 DATA_REC(NO, 0, 1, 1, 1, 1, 1, 1, 1, "bcdefgh"),
2151 DATA_REC(NO, 1, 1, 1, 1, 1, 1, 1, 0, ""),
2152 #undef FILTER
2153 #define FILTER "a == 1 || b == 1 || c == 1 || d == 1 || " \
2154 "e == 1 || f == 1 || g == 1 || h == 1"
2155 DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 0, ""),
2156 DATA_REC(YES, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2157 DATA_REC(YES, 1, 0, 0, 0, 0, 0, 0, 0, "bcdefgh"),
2158 #undef FILTER
2159 #define FILTER "(a == 1 || b == 1) && (c == 1 || d == 1) && " \
2160 "(e == 1 || f == 1) && (g == 1 || h == 1)"
2161 DATA_REC(NO, 0, 0, 1, 1, 1, 1, 1, 1, "dfh"),
2162 DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2163 DATA_REC(YES, 1, 0, 1, 0, 0, 1, 0, 1, "bd"),
2164 DATA_REC(NO, 1, 0, 1, 0, 0, 1, 0, 0, "bd"),
2165 #undef FILTER
2166 #define FILTER "(a == 1 && b == 1) || (c == 1 && d == 1) || " \
2167 "(e == 1 && f == 1) || (g == 1 && h == 1)"
2168 DATA_REC(YES, 1, 0, 1, 1, 1, 1, 1, 1, "efgh"),
2169 DATA_REC(YES, 0, 0, 0, 0, 0, 0, 1, 1, ""),
2170 DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2171 #undef FILTER
2172 #define FILTER "(a == 1 && b == 1) && (c == 1 && d == 1) && " \
2173 "(e == 1 && f == 1) || (g == 1 && h == 1)"
2174 DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 0, "gh"),
2175 DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2176 DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, ""),
2177 #undef FILTER
2178 #define FILTER "((a == 1 || b == 1) || (c == 1 || d == 1) || " \
2179 "(e == 1 || f == 1)) && (g == 1 || h == 1)"
2180 DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 1, "bcdef"),
2181 DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 0, ""),
2182 DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, "h"),
2183 #undef FILTER
2184 #define FILTER "((((((((a == 1) && (b == 1)) || (c == 1)) && (d == 1)) || " \
2185 "(e == 1)) && (f == 1)) || (g == 1)) && (h == 1))"
2186 DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "ceg"),
2187 DATA_REC(NO, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2188 DATA_REC(NO, 1, 0, 1, 0, 1, 0, 1, 0, ""),
2189 #undef FILTER
2190 #define FILTER "((((((((a == 1) || (b == 1)) && (c == 1)) || (d == 1)) && " \
2191 "(e == 1)) || (f == 1)) && (g == 1)) || (h == 1))"
2192 DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "bdfh"),
2193 DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2194 DATA_REC(YES, 1, 0, 1, 0, 1, 0, 1, 0, "bdfh"),
2197 #undef DATA_REC
2198 #undef FILTER
2199 #undef YES
2200 #undef NO
2202 #define DATA_CNT (sizeof(test_filter_data)/sizeof(struct test_filter_data_t))
2204 static int test_pred_visited;
2206 static int test_pred_visited_fn(struct filter_pred *pred, void *event)
2208 struct ftrace_event_field *field = pred->field;
2210 test_pred_visited = 1;
2211 printk(KERN_INFO "\npred visited %s\n", field->name);
2212 return 1;
2215 static int test_walk_pred_cb(enum move_type move, struct filter_pred *pred,
2216 int *err, void *data)
2218 char *fields = data;
2220 if ((move == MOVE_DOWN) &&
2221 (pred->left == FILTER_PRED_INVALID)) {
2222 struct ftrace_event_field *field = pred->field;
2224 if (!field) {
2225 WARN(1, "all leafs should have field defined");
2226 return WALK_PRED_DEFAULT;
2228 if (!strchr(fields, *field->name))
2229 return WALK_PRED_DEFAULT;
2231 WARN_ON(!pred->fn);
2232 pred->fn = test_pred_visited_fn;
2234 return WALK_PRED_DEFAULT;
2237 static __init int ftrace_test_event_filter(void)
2239 int i;
2241 printk(KERN_INFO "Testing ftrace filter: ");
2243 for (i = 0; i < DATA_CNT; i++) {
2244 struct event_filter *filter = NULL;
2245 struct test_filter_data_t *d = &test_filter_data[i];
2246 int err;
2248 err = create_filter(&event_ftrace_test_filter, d->filter,
2249 false, &filter);
2250 if (err) {
2251 printk(KERN_INFO
2252 "Failed to get filter for '%s', err %d\n",
2253 d->filter, err);
2254 __free_filter(filter);
2255 break;
2259 * The preemption disabling is not really needed for self
2260 * tests, but the rcu dereference will complain without it.
2262 preempt_disable();
2263 if (*d->not_visited)
2264 walk_pred_tree(filter->preds, filter->root,
2265 test_walk_pred_cb,
2266 d->not_visited);
2268 test_pred_visited = 0;
2269 err = filter_match_preds(filter, &d->rec);
2270 preempt_enable();
2272 __free_filter(filter);
2274 if (test_pred_visited) {
2275 printk(KERN_INFO
2276 "Failed, unwanted pred visited for filter %s\n",
2277 d->filter);
2278 break;
2281 if (err != d->match) {
2282 printk(KERN_INFO
2283 "Failed to match filter '%s', expected %d\n",
2284 d->filter, d->match);
2285 break;
2289 if (i == DATA_CNT)
2290 printk(KERN_CONT "OK\n");
2292 return 0;
2295 late_initcall(ftrace_test_event_filter);
2297 #endif /* CONFIG_FTRACE_STARTUP_TEST */