diff options
author | Wu Zhangjin <wuzhangjin@gmail.com> | 2011-01-19 14:28:27 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2011-03-14 16:07:24 -0400 |
commit | 9a620a559be65023b5fd5d0eaf37dae884c4f404 (patch) | |
tree | 3c7e7d69c6ee14088ac8bf08499d9e8afce2710c /arch/mips | |
parent | 52bd080d5c87af556bf71e3b07bdd8586166c43b (diff) |
MIPS, Tracing: Speed up function graph tracer
This simply moves the "ip-=4" statement down to the end of the do { ...
} while (...); loop, which reduces one unneeded subtration and the
subsequent memory loading and comparison.
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
Cc: Steven Rostedt <srostedt@redhat.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2006/
Signed-off-by: Ralf Baechle <ralf@duck.linux-mips.net>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/kernel/ftrace.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c index 5a84a1f11231..635c1dcdc4fc 100644 --- a/arch/mips/kernel/ftrace.c +++ b/arch/mips/kernel/ftrace.c | |||
@@ -200,19 +200,17 @@ unsigned long ftrace_get_parent_addr(unsigned long self_addr, | |||
200 | int faulted; | 200 | int faulted; |
201 | 201 | ||
202 | /* | 202 | /* |
203 | * For module, move the ip from calling site of mcount to the | 203 | * For module, move the ip from calling site of mcount after the |
204 | * instruction "lui v1, hi_16bit_of_mcount"(offset is 20), but for | 204 | * instruction "lui v1, hi_16bit_of_mcount"(offset is 24), but for |
205 | * kernel, move to the instruction "move ra, at"(offset is 12) | 205 | * kernel, move after the instruction "move ra, at"(offset is 16) |
206 | */ | 206 | */ |
207 | ip = self_addr - (in_module(self_addr) ? 20 : 12); | 207 | ip = self_addr - (in_module(self_addr) ? 24 : 16); |
208 | 208 | ||
209 | /* | 209 | /* |
210 | * search the text until finding the non-store instruction or "s{d,w} | 210 | * search the text until finding the non-store instruction or "s{d,w} |
211 | * ra, offset(sp)" instruction | 211 | * ra, offset(sp)" instruction |
212 | */ | 212 | */ |
213 | do { | 213 | do { |
214 | ip -= 4; | ||
215 | |||
216 | /* get the code at "ip": code = *(unsigned int *)ip; */ | 214 | /* get the code at "ip": code = *(unsigned int *)ip; */ |
217 | safe_load_code(code, ip, faulted); | 215 | safe_load_code(code, ip, faulted); |
218 | 216 | ||
@@ -226,7 +224,9 @@ unsigned long ftrace_get_parent_addr(unsigned long self_addr, | |||
226 | if ((code & S_R_SP) != S_R_SP) | 224 | if ((code & S_R_SP) != S_R_SP) |
227 | return parent_addr; | 225 | return parent_addr; |
228 | 226 | ||
229 | } while (((code & S_RA_SP) != S_RA_SP)); | 227 | /* Move to the next instruction */ |
228 | ip -= 4; | ||
229 | } while ((code & S_RA_SP) != S_RA_SP); | ||
230 | 230 | ||
231 | sp = fp + (code & OFFSET_MASK); | 231 | sp = fp + (code & OFFSET_MASK); |
232 | 232 | ||