|
@@ -7,11 +7,13 @@
|
|
|
|
|
|
unsigned long unwind_get_return_address(struct unwind_state *state)
|
|
|
{
|
|
|
- unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
+ unsigned long addr;
|
|
|
|
|
|
if (unwind_done(state))
|
|
|
return 0;
|
|
|
|
|
|
+ addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
+
|
|
|
return ftrace_graph_ret_addr(state->task, &state->graph_idx,
|
|
|
addr, state->sp);
|
|
|
}
|
|
@@ -25,11 +27,12 @@ bool unwind_next_frame(struct unwind_state *state)
|
|
|
return false;
|
|
|
|
|
|
do {
|
|
|
- unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
+ for (state->sp++; state->sp < info->end; state->sp++) {
|
|
|
+ unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
|
|
|
- for (state->sp++; state->sp < info->end; state->sp++)
|
|
|
if (__kernel_text_address(addr))
|
|
|
return true;
|
|
|
+ }
|
|
|
|
|
|
state->sp = info->next_sp;
|
|
|
|