diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
| -rw-r--r-- | arch/powerpc/kernel/process.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index ceb4e7b62cf4..a902723fdc69 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -339,6 +339,13 @@ static void set_debug_reg_defaults(struct thread_struct *thread)  static void prime_debug_regs(struct thread_struct *thread)  { +	/* +	 * We could have inherited MSR_DE from userspace, since +	 * it doesn't get cleared on exception entry.  Make sure +	 * MSR_DE is clear before we enable any debug events. +	 */ +	mtmsr(mfmsr() & ~MSR_DE); +  	mtspr(SPRN_IAC1, thread->iac1);  	mtspr(SPRN_IAC2, thread->iac2);  #if CONFIG_PPC_ADV_DEBUG_IACS > 2 @@ -971,6 +978,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,  	 * do some house keeping and then return from the fork or clone  	 * system call, using the stack frame created above.  	 */ +	((unsigned long *)sp)[0] = 0;  	sp -= sizeof(struct pt_regs);  	kregs = (struct pt_regs *) sp;  	sp -= STACK_FRAME_OVERHEAD; | 
