diff options
-rw-r--r-- | kernel/trace/ftrace.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 0118979e211f..b532e4a68c74 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
@@ -355,20 +355,26 @@ __ftrace_replace_code(struct dyn_ftrace *rec, | |||
355 | * If this record is set not to trace then | 355 | * If this record is set not to trace then |
356 | * do nothing. | 356 | * do nothing. |
357 | * | 357 | * |
358 | * If this record is set not to trace and | ||
359 | * it is enabled then disable it. | ||
360 | * | ||
358 | * If this record is not set to be filtered and | 361 | * If this record is not set to be filtered and |
359 | * it is enabled, disable it. | 362 | * it is enabled, disable it. |
360 | */ | 363 | */ |
361 | fl = rec->flags & (FTRACE_FL_FILTER | FTRACE_FL_ENABLED); | 364 | |
365 | fl = rec->flags & (FTRACE_FL_FILTER | FTRACE_FL_NOTRACE | | ||
366 | FTRACE_FL_ENABLED); | ||
362 | 367 | ||
363 | if ((fl == (FTRACE_FL_FILTER | FTRACE_FL_ENABLED)) || | 368 | if ((fl == (FTRACE_FL_FILTER | FTRACE_FL_ENABLED)) || |
364 | (fl == 0) || (rec->flags & FTRACE_FL_NOTRACE)) | 369 | (fl == (FTRACE_FL_FILTER | FTRACE_FL_NOTRACE)) || |
370 | !fl || (fl == FTRACE_FL_NOTRACE)) | ||
365 | return 0; | 371 | return 0; |
366 | 372 | ||
367 | /* | 373 | /* |
368 | * If it is enabled disable it, | 374 | * If it is enabled disable it, |
369 | * otherwise enable it! | 375 | * otherwise enable it! |
370 | */ | 376 | */ |
371 | if (fl == FTRACE_FL_ENABLED) { | 377 | if (fl & FTRACE_FL_ENABLED) { |
372 | /* swap new and old */ | 378 | /* swap new and old */ |
373 | new = old; | 379 | new = old; |
374 | old = ftrace_call_replace(ip, FTRACE_ADDR); | 380 | old = ftrace_call_replace(ip, FTRACE_ADDR); |