diff options
Diffstat (limited to 'arch/x86/kernel/process_64.c')
| -rw-r--r-- | arch/x86/kernel/process_64.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index ad535b68317..a98fe88fab6 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -52,6 +52,7 @@  #include <asm/idle.h>  #include <asm/syscalls.h>  #include <asm/ds.h> +#include <asm/debugreg.h>  asmlinkage extern void ret_from_fork(void); @@ -226,8 +227,7 @@ void __show_regs(struct pt_regs *regs, int all)  void show_regs(struct pt_regs *regs)  { -	printk(KERN_INFO "CPU %d:", smp_processor_id()); -	__show_regs(regs, 1); +	show_registers(regs);  	show_trace(NULL, regs, (void *)(regs + 1), regs->bp);  } @@ -297,12 +297,16 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,  	p->thread.fs = me->thread.fs;  	p->thread.gs = me->thread.gs; +	p->thread.io_bitmap_ptr = NULL;  	savesegment(gs, p->thread.gsindex);  	savesegment(fs, p->thread.fsindex);  	savesegment(es, p->thread.es);  	savesegment(ds, p->thread.ds); +	err = -ENOMEM; +	memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); +  	if (unlikely(test_tsk_thread_flag(me, TIF_IO_BITMAP))) {  		p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);  		if (!p->thread.io_bitmap_ptr) { @@ -341,6 +345,7 @@ out:  		kfree(p->thread.io_bitmap_ptr);  		p->thread.io_bitmap_max = 0;  	} +  	return err;  } @@ -495,6 +500,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)  	 */  	if (preload_fpu)  		__math_state_restore(); +  	return prev_p;  } @@ -664,3 +670,8 @@ long sys_arch_prctl(int code, unsigned long addr)  	return do_arch_prctl(current, code, addr);  } +unsigned long KSTK_ESP(struct task_struct *task) +{ +	return (test_tsk_thread_flag(task, TIF_IA32)) ? +			(task_pt_regs(task)->sp) : ((task)->thread.usersp); +}  |