diff options
author | David S. Miller <davem@davemloft.net> | 2010-04-07 02:53:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-04-07 02:53:30 -0400 |
commit | 4a35ecf8bf1c4b039503fa554100fe85c761de76 (patch) | |
tree | 9b75f5d5636004d9a9aa496924377379be09aa1f /arch/blackfin/kernel/ftrace-entry.S | |
parent | b4d562e3c3553ac58c7120555c4e4aefbb090a2a (diff) | |
parent | fb9e2d887243499b8d28efcf80821c4f6a092395 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/bonding/bond_main.c
drivers/net/via-velocity.c
drivers/net/wireless/iwlwifi/iwl-agn.c
Diffstat (limited to 'arch/blackfin/kernel/ftrace-entry.S')
-rw-r--r-- | arch/blackfin/kernel/ftrace-entry.S | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/arch/blackfin/kernel/ftrace-entry.S b/arch/blackfin/kernel/ftrace-entry.S index 76dd4fbcd17a..d66446b572c0 100644 --- a/arch/blackfin/kernel/ftrace-entry.S +++ b/arch/blackfin/kernel/ftrace-entry.S | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * mcount and friends -- ftrace stuff | 2 | * mcount and friends -- ftrace stuff |
3 | * | 3 | * |
4 | * Copyright (C) 2009 Analog Devices Inc. | 4 | * Copyright (C) 2009-2010 Analog Devices Inc. |
5 | * Licensed under the GPL-2 or later. | 5 | * Licensed under the GPL-2 or later. |
6 | */ | 6 | */ |
7 | 7 | ||
@@ -21,6 +21,15 @@ | |||
21 | * function will be waiting there. mmmm pie. | 21 | * function will be waiting there. mmmm pie. |
22 | */ | 22 | */ |
23 | ENTRY(__mcount) | 23 | ENTRY(__mcount) |
24 | #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | ||
25 | /* optional micro optimization: return if stopped */ | ||
26 | p1.l = _function_trace_stop; | ||
27 | p1.h = _function_trace_stop; | ||
28 | r3 = [p1]; | ||
29 | cc = r3 == 0; | ||
30 | if ! cc jump _ftrace_stub (bp); | ||
31 | #endif | ||
32 | |||
24 | /* save third function arg early so we can do testing below */ | 33 | /* save third function arg early so we can do testing below */ |
25 | [--sp] = r2; | 34 | [--sp] = r2; |
26 | 35 | ||
@@ -106,9 +115,12 @@ ENTRY(_ftrace_graph_caller) | |||
106 | [--sp] = r1; | 115 | [--sp] = r1; |
107 | [--sp] = rets; | 116 | [--sp] = rets; |
108 | 117 | ||
109 | /* prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) */ | 118 | /* prepare_ftrace_return(parent, self_addr, frame_pointer) */ |
110 | r0 = sp; | 119 | r0 = sp; /* unsigned long *parent */ |
111 | r1 = rets; | 120 | r1 = rets; /* unsigned long self_addr */ |
121 | #ifdef CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST | ||
122 | r2 = fp; /* unsigned long frame_pointer */ | ||
123 | #endif | ||
112 | r0 += 16; /* skip the 4 local regs on stack */ | 124 | r0 += 16; /* skip the 4 local regs on stack */ |
113 | r1 += -MCOUNT_INSN_SIZE; | 125 | r1 += -MCOUNT_INSN_SIZE; |
114 | call _prepare_ftrace_return; | 126 | call _prepare_ftrace_return; |
@@ -127,6 +139,9 @@ ENTRY(_return_to_handler) | |||
127 | [--sp] = r1; | 139 | [--sp] = r1; |
128 | 140 | ||
129 | /* get original return address */ | 141 | /* get original return address */ |
142 | #ifdef CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST | ||
143 | r0 = fp; /* Blackfin is sane, so omit this */ | ||
144 | #endif | ||
130 | call _ftrace_return_to_handler; | 145 | call _ftrace_return_to_handler; |
131 | rets = r0; | 146 | rets = r0; |
132 | 147 | ||