ftrace: prevent freeing of all failed updates
authorAbhishek Sagar <sagar.abhishek@gmail.com>
Tue, 3 Jun 2008 03:03:41 +0000 (08:33 +0530)
committerIngo Molnar <mingo@elte.hu>
Tue, 10 Jun 2008 09:59:05 +0000 (11:59 +0200)
Steven Rostedt wrote:
> If we unload a module and reload it, will it ever get converted again?

The intent was always to filter core kernel functions to prevent their freeing.
Here's a fix which should allow re-recording of module call-sites.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/ftrace.c

index ad568c7..0118979 100644 (file)
@@ -430,7 +430,7 @@ static void ftrace_replace_code(int enable)
                        if (failed && (rec->flags & FTRACE_FL_CONVERTED)) {
                                rec->flags |= FTRACE_FL_FAILED;
                                if ((system_state == SYSTEM_BOOTING) ||
-                                   !kernel_text_address(rec->ip)) {
+                                   !core_kernel_text(rec->ip)) {
                                        ftrace_del_hash(rec);
                                        ftrace_free_rec(rec);
                                }
@@ -651,10 +651,9 @@ static int __ftrace_update_code(void *ignore)
                                ftrace_update_cnt++;
                        } else {
                                if ((system_state == SYSTEM_BOOTING) ||
-                                   !kernel_text_address(p->ip)) {
+                                   !core_kernel_text(p->ip)) {
                                        ftrace_del_hash(p);
                                        ftrace_free_rec(p);
-
                                }
                        }
                }