diff options
Diffstat (limited to 'fs/proc/base.c')
| -rw-r--r-- | fs/proc/base.c | 34 | 
1 files changed, 15 insertions, 19 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index ddef482f1334..f179568b4c76 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -407,7 +407,6 @@ static void unlock_trace(struct task_struct *task)  static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,  			  struct pid *pid, struct task_struct *task)  { -	struct stack_trace trace;  	unsigned long *entries;  	int err; @@ -430,20 +429,17 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,  	if (!entries)  		return -ENOMEM; -	trace.nr_entries	= 0; -	trace.max_entries	= MAX_STACK_TRACE_DEPTH; -	trace.entries		= entries; -	trace.skip		= 0; -  	err = lock_trace(task);  	if (!err) { -		unsigned int i; +		unsigned int i, nr_entries; -		save_stack_trace_tsk(task, &trace); +		nr_entries = stack_trace_save_tsk(task, entries, +						  MAX_STACK_TRACE_DEPTH, 0); -		for (i = 0; i < trace.nr_entries; i++) { +		for (i = 0; i < nr_entries; i++) {  			seq_printf(m, "[<0>] %pB\n", (void *)entries[i]);  		} +  		unlock_trace(task);  	}  	kfree(entries); @@ -489,10 +485,9 @@ static int lstats_show_proc(struct seq_file *m, void *v)  				   lr->count, lr->time, lr->max);  			for (q = 0; q < LT_BACKTRACEDEPTH; q++) {  				unsigned long bt = lr->backtrace[q]; +  				if (!bt)  					break; -				if (bt == ULONG_MAX) -					break;  				seq_printf(m, " %ps", (void *)bt);  			}  			seq_putc(m, '\n'); @@ -616,24 +611,25 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,  static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,  			    struct pid *pid, struct task_struct *task)  { -	long nr; -	unsigned long args[6], sp, pc; +	struct syscall_info info; +	u64 *args = &info.data.args[0];  	int res;  	res = lock_trace(task);  	if (res)  		return res; -	if (task_current_syscall(task, &nr, args, 6, &sp, &pc)) +	if (task_current_syscall(task, &info))  		seq_puts(m, "running\n"); -	else if (nr < 0) -		seq_printf(m, "%ld 0x%lx 0x%lx\n", nr, sp, pc); +	else if (info.data.nr < 0) +		seq_printf(m, "%d 0x%llx 0x%llx\n", +			   info.data.nr, info.sp, info.data.instruction_pointer);  	else  		seq_printf(m, -		       "%ld 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\n", -		       nr, +		       "%d 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx\n", +		       info.data.nr,  		       args[0], args[1], args[2], args[3], args[4], args[5], -		       sp, pc); +		       info.sp, info.data.instruction_pointer);  	unlock_trace(task);  	return 0;  | 
