static int unwind_frame_kernel()

in kernel/perf_callchain.c [13:33]


static int unwind_frame_kernel(struct stackframe *frame)
{
	unsigned long low = (unsigned long)task_stack_page(current);
	unsigned long high = low + THREAD_SIZE;

	if (unlikely(frame->fp < low || frame->fp > high))
		return -EPERM;

	if (kstack_end((void *)frame->fp) || frame->fp & 0x3)
		return -EPERM;

	*frame = *(struct stackframe *)frame->fp;

	if (__kernel_text_address(frame->lr)) {
		int graph = 0;

		frame->lr = ftrace_graph_ret_addr(NULL, &graph, frame->lr,
				NULL);
	}
	return 0;
}