From c794f9dd4b46ffb2bb322ac86dd54e145ba4b98f Mon Sep 17 00:00:00 2001 From: Lai Jiangshan Date: Tue, 24 Mar 2009 13:38:06 +0800 Subject: [PATCH] --- yaml --- r: 141036 b: refs/heads/master c: ee000b7f9fe429d2470c674ccec8d344f6789e0d h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/ftrace.h | 12 +++++++++--- trunk/kernel/trace/ftrace.c | 8 ++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 4972e3d55c8e..aafba07a90b7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cc59c9e8d0165c632fd056c4a23e36f917507fb4 +refs/heads/master: ee000b7f9fe429d2470c674ccec8d344f6789e0d diff --git a/trunk/include/linux/ftrace.h b/trunk/include/linux/ftrace.h index 1141248c84ee..015a3d22cf74 100644 --- a/trunk/include/linux/ftrace.h +++ b/trunk/include/linux/ftrace.h @@ -145,9 +145,15 @@ enum { }; struct dyn_ftrace { - unsigned long ip; /* address of mcount call-site */ - unsigned long flags; - struct dyn_arch_ftrace arch; + union { + unsigned long ip; /* address of mcount call-site */ + struct dyn_ftrace *freelist; + }; + union { + unsigned long flags; + struct dyn_ftrace *newlist; + }; + struct dyn_arch_ftrace arch; }; int ftrace_force_update(void); diff --git a/trunk/kernel/trace/ftrace.c b/trunk/kernel/trace/ftrace.c index bb377112b1bb..7b8722baf153 100644 --- a/trunk/kernel/trace/ftrace.c +++ b/trunk/kernel/trace/ftrace.c @@ -341,7 +341,7 @@ static inline int record_frozen(struct dyn_ftrace *rec) static void ftrace_free_rec(struct dyn_ftrace *rec) { - rec->ip = (unsigned long)ftrace_free_records; + rec->freelist = ftrace_free_records; ftrace_free_records = rec; rec->flags |= FTRACE_FL_FREE; } @@ -379,7 +379,7 @@ static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip) return NULL; } - ftrace_free_records = (void *)rec->ip; + ftrace_free_records = rec->freelist; memset(rec, 0, sizeof(*rec)); return rec; } @@ -411,7 +411,7 @@ ftrace_record_ip(unsigned long ip) return NULL; rec->ip = ip; - rec->flags = (unsigned long)ftrace_new_addrs; + rec->newlist = ftrace_new_addrs; ftrace_new_addrs = rec; return rec; @@ -731,7 +731,7 @@ static int ftrace_update_code(struct module *mod) return -1; p = ftrace_new_addrs; - ftrace_new_addrs = (struct dyn_ftrace *)p->flags; + ftrace_new_addrs = p->newlist; p->flags = 0L; /* convert record (i.e, patch mcount-call with NOP) */