aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ftrace.c
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2008-11-14 19:21:19 -0500
committerIngo Molnar <mingo@elte.hu>2008-11-16 01:30:17 -0500
commit918c115410c6cc57033835b6a401e57697f9ea4f (patch)
tree62d4f9d5c76f022f59cdb2a58e95d55c9c233799 /kernel/trace/ftrace.c
parentb17e8a37a13d0e87165054714434534bb7e69f2d (diff)
ftrace: do not process freed records
Impact: keep from converting freed records When the tracer is started or stopped, it converts all code pointed to by the saved records into callers to ftrace or nops. When modules are unloaded, their records are freed, but they still exist within the record pages. This patch changes the code to skip over freed records. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/ftrace.c')
-rw-r--r--kernel/trace/ftrace.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index d5bd21f39524..3940c71ac2a2 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -488,8 +488,12 @@ static void ftrace_replace_code(int enable)
488 for (i = 0; i < pg->index; i++) { 488 for (i = 0; i < pg->index; i++) {
489 rec = &pg->records[i]; 489 rec = &pg->records[i];
490 490
491 /* don't modify code that has already faulted */ 491 /*
492 if (rec->flags & FTRACE_FL_FAILED) 492 * Skip over free records and records that have
493 * failed.
494 */
495 if (rec->flags & FTRACE_FL_FREE ||
496 rec->flags & FTRACE_FL_FAILED)
493 continue; 497 continue;
494 498
495 /* ignore updates to this record's mcount site */ 499 /* ignore updates to this record's mcount site */