aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/ftrace.h12
-rw-r--r--kernel/trace/ftrace.c8
2 files changed, 13 insertions, 7 deletions
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 1141248c84ee..015a3d22cf74 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -145,9 +145,15 @@ enum {
145}; 145};
146 146
147struct dyn_ftrace { 147struct dyn_ftrace {
148 unsigned long ip; /* address of mcount call-site */ 148 union {
149 unsigned long flags; 149 unsigned long ip; /* address of mcount call-site */
150 struct dyn_arch_ftrace arch; 150 struct dyn_ftrace *freelist;
151 };
152 union {
153 unsigned long flags;
154 struct dyn_ftrace *newlist;
155 };
156 struct dyn_arch_ftrace arch;
151}; 157};
152 158
153int ftrace_force_update(void); 159int ftrace_force_update(void);
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index bb377112b1bb..7b8722baf153 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -341,7 +341,7 @@ static inline int record_frozen(struct dyn_ftrace *rec)
341 341
342static void ftrace_free_rec(struct dyn_ftrace *rec) 342static void ftrace_free_rec(struct dyn_ftrace *rec)
343{ 343{
344 rec->ip = (unsigned long)ftrace_free_records; 344 rec->freelist = ftrace_free_records;
345 ftrace_free_records = rec; 345 ftrace_free_records = rec;
346 rec->flags |= FTRACE_FL_FREE; 346 rec->flags |= FTRACE_FL_FREE;
347} 347}
@@ -379,7 +379,7 @@ static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip)
379 return NULL; 379 return NULL;
380 } 380 }
381 381
382 ftrace_free_records = (void *)rec->ip; 382 ftrace_free_records = rec->freelist;
383 memset(rec, 0, sizeof(*rec)); 383 memset(rec, 0, sizeof(*rec));
384 return rec; 384 return rec;
385 } 385 }
@@ -411,7 +411,7 @@ ftrace_record_ip(unsigned long ip)
411 return NULL; 411 return NULL;
412 412
413 rec->ip = ip; 413 rec->ip = ip;
414 rec->flags = (unsigned long)ftrace_new_addrs; 414 rec->newlist = ftrace_new_addrs;
415 ftrace_new_addrs = rec; 415 ftrace_new_addrs = rec;
416 416
417 return rec; 417 return rec;
@@ -731,7 +731,7 @@ static int ftrace_update_code(struct module *mod)
731 return -1; 731 return -1;
732 732
733 p = ftrace_new_addrs; 733 p = ftrace_new_addrs;
734 ftrace_new_addrs = (struct dyn_ftrace *)p->flags; 734 ftrace_new_addrs = p->newlist;
735 p->flags = 0L; 735 p->flags = 0L;
736 736
737 /* convert record (i.e, patch mcount-call with NOP) */ 737 /* convert record (i.e, patch mcount-call with NOP) */