diff options
Diffstat (limited to 'arch/x86/kernel/dumpstack.c')
| -rw-r--r-- | arch/x86/kernel/dumpstack.c | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index 2bb25c3fe2e8..ef8017ca5ba9 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -42,16 +42,14 @@ void printk_address(unsigned long address)  static void  print_ftrace_graph_addr(unsigned long addr, void *data,  			const struct stacktrace_ops *ops, -			struct thread_info *tinfo, int *graph) +			struct task_struct *task, int *graph)  { -	struct task_struct *task;  	unsigned long ret_addr;  	int index;  	if (addr != (unsigned long)return_to_handler)  		return; -	task = tinfo->task;  	index = task->curr_ret_stack;  	if (!task->ret_stack || index < *graph) @@ -68,7 +66,7 @@ print_ftrace_graph_addr(unsigned long addr, void *data,  static inline void  print_ftrace_graph_addr(unsigned long addr, void *data,  			const struct stacktrace_ops *ops, -			struct thread_info *tinfo, int *graph) +			struct task_struct *task, int *graph)  { }  #endif @@ -79,10 +77,10 @@ print_ftrace_graph_addr(unsigned long addr, void *data,   * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack   */ -static inline int valid_stack_ptr(struct thread_info *tinfo, +static inline int valid_stack_ptr(struct task_struct *task,  			void *p, unsigned int size, void *end)  { -	void *t = tinfo; +	void *t = task_stack_page(task);  	if (end) {  		if (p < end && p >= (end-THREAD_SIZE))  			return 1; @@ -93,14 +91,14 @@ static inline int valid_stack_ptr(struct thread_info *tinfo,  }  unsigned long -print_context_stack(struct thread_info *tinfo, +print_context_stack(struct task_struct *task,  		unsigned long *stack, unsigned long bp,  		const struct stacktrace_ops *ops, void *data,  		unsigned long *end, int *graph)  {  	struct stack_frame *frame = (struct stack_frame *)bp; -	while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { +	while (valid_stack_ptr(task, stack, sizeof(*stack), end)) {  		unsigned long addr;  		addr = *stack; @@ -112,7 +110,7 @@ print_context_stack(struct thread_info *tinfo,  			} else {  				ops->address(data, addr, 0);  			} -			print_ftrace_graph_addr(addr, data, ops, tinfo, graph); +			print_ftrace_graph_addr(addr, data, ops, task, graph);  		}  		stack++;  	} @@ -121,7 +119,7 @@ print_context_stack(struct thread_info *tinfo,  EXPORT_SYMBOL_GPL(print_context_stack);  unsigned long -print_context_stack_bp(struct thread_info *tinfo, +print_context_stack_bp(struct task_struct *task,  		       unsigned long *stack, unsigned long bp,  		       const struct stacktrace_ops *ops, void *data,  		       unsigned long *end, int *graph) @@ -129,7 +127,7 @@ print_context_stack_bp(struct thread_info *tinfo,  	struct stack_frame *frame = (struct stack_frame *)bp;  	unsigned long *ret_addr = &frame->return_address; -	while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) { +	while (valid_stack_ptr(task, ret_addr, sizeof(*ret_addr), end)) {  		unsigned long addr = *ret_addr;  		if (!__kernel_text_address(addr)) @@ -139,7 +137,7 @@ print_context_stack_bp(struct thread_info *tinfo,  			break;  		frame = frame->next_frame;  		ret_addr = &frame->return_address; -		print_ftrace_graph_addr(addr, data, ops, tinfo, graph); +		print_ftrace_graph_addr(addr, data, ops, task, graph);  	}  	return (unsigned long)frame;  | 
