|
@@ -1798,12 +1798,12 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable)
|
|
|
unsigned long ftrace_addr;
|
|
|
int ret;
|
|
|
|
|
|
- ret = ftrace_update_record(rec, enable);
|
|
|
+ ftrace_addr = ftrace_get_addr_new(rec);
|
|
|
|
|
|
- if (rec->flags & FTRACE_FL_REGS)
|
|
|
- ftrace_addr = (unsigned long)FTRACE_REGS_ADDR;
|
|
|
- else
|
|
|
- ftrace_addr = (unsigned long)FTRACE_ADDR;
|
|
|
+ /* This needs to be done before we call ftrace_update_record */
|
|
|
+ ftrace_old_addr = ftrace_get_addr_curr(rec);
|
|
|
+
|
|
|
+ ret = ftrace_update_record(rec, enable);
|
|
|
|
|
|
switch (ret) {
|
|
|
case FTRACE_UPDATE_IGNORE:
|
|
@@ -1817,11 +1817,6 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable)
|
|
|
|
|
|
case FTRACE_UPDATE_MODIFY_CALL_REGS:
|
|
|
case FTRACE_UPDATE_MODIFY_CALL:
|
|
|
- if (rec->flags & FTRACE_FL_REGS)
|
|
|
- ftrace_old_addr = (unsigned long)FTRACE_ADDR;
|
|
|
- else
|
|
|
- ftrace_old_addr = (unsigned long)FTRACE_REGS_ADDR;
|
|
|
-
|
|
|
return ftrace_modify_call(rec, ftrace_old_addr, ftrace_addr);
|
|
|
}
|
|
|
|