diff options
Diffstat (limited to 'kernel/trace/ftrace.c')
-rw-r--r-- | kernel/trace/ftrace.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index a12f80efceaa..2f32969c09df 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
@@ -1047,6 +1047,13 @@ ftrace_match(unsigned char *buff, int len, int enable) | |||
1047 | int type = MATCH_FULL; | 1047 | int type = MATCH_FULL; |
1048 | unsigned long flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; | 1048 | unsigned long flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; |
1049 | unsigned i, match = 0, search_len = 0; | 1049 | unsigned i, match = 0, search_len = 0; |
1050 | int not = 0; | ||
1051 | |||
1052 | if (buff[0] == '!') { | ||
1053 | not = 1; | ||
1054 | buff++; | ||
1055 | len--; | ||
1056 | } | ||
1050 | 1057 | ||
1051 | for (i = 0; i < len; i++) { | 1058 | for (i = 0; i < len; i++) { |
1052 | if (buff[i] == '*') { | 1059 | if (buff[i] == '*') { |
@@ -1100,8 +1107,12 @@ ftrace_match(unsigned char *buff, int len, int enable) | |||
1100 | matched = 1; | 1107 | matched = 1; |
1101 | break; | 1108 | break; |
1102 | } | 1109 | } |
1103 | if (matched) | 1110 | if (matched) { |
1104 | rec->flags |= flag; | 1111 | if (not) |
1112 | rec->flags &= ~flag; | ||
1113 | else | ||
1114 | rec->flags |= flag; | ||
1115 | } | ||
1105 | } | 1116 | } |
1106 | pg = pg->next; | 1117 | pg = pg->next; |
1107 | } | 1118 | } |