forked from luck/tmp_suning_uos_patched
powerpc/book3e-64: Fix debug support for userspace
With the introduction of CONFIG_PPC_ADV_DEBUG_REGS user space debug is broken on Book-E 64-bit parts that support delayed debug events. When switch_booke_debug_regs() sets DBCR0 we'll start getting debug events as MSR_DE is also set and we aren't able to handle debug events from kernel space. We can remove the hack that always enables MSR_DE and loads up DBCR0 and just utilize switch_booke_debug_regs() to get user space debug working again. We still need to handle critical/debug exception stacks & proper save/restore of state for those exception levles to support debug events from kernel space like we have on 32-bit. Signed-off-by: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
b95bc21914
commit
187b9f2aa7
@ -31,7 +31,7 @@
|
||||
|
||||
#define MSR_ MSR_ME | MSR_CE
|
||||
#define MSR_KERNEL MSR_ | MSR_64BIT
|
||||
#define MSR_USER32 MSR_ | MSR_PR | MSR_EE | MSR_DE
|
||||
#define MSR_USER32 MSR_ | MSR_PR | MSR_EE
|
||||
#define MSR_USER64 MSR_USER32 | MSR_64BIT
|
||||
#elif defined (CONFIG_40x)
|
||||
#define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE)
|
||||
|
@ -486,28 +486,6 @@ struct task_struct *__switch_to(struct task_struct *prev,
|
||||
new_thread = &new->thread;
|
||||
old_thread = ¤t->thread;
|
||||
|
||||
#if defined(CONFIG_PPC_BOOK3E_64)
|
||||
/* XXX Current Book3E code doesn't deal with kernel side DBCR0,
|
||||
* we always hold the user values, so we set it now.
|
||||
*
|
||||
* However, we ensure the kernel MSR:DE is appropriately cleared too
|
||||
* to avoid spurrious single step exceptions in the kernel.
|
||||
*
|
||||
* This will have to change to merge with the ppc32 code at some point,
|
||||
* but I don't like much what ppc32 is doing today so there's some
|
||||
* thinking needed there
|
||||
*/
|
||||
if ((new_thread->dbcr0 | old_thread->dbcr0) & DBCR0_IDM) {
|
||||
u32 dbcr0;
|
||||
|
||||
mtmsr(mfmsr() & ~MSR_DE);
|
||||
isync();
|
||||
dbcr0 = mfspr(SPRN_DBCR0);
|
||||
dbcr0 = (dbcr0 & DBCR0_EDM) | new_thread->dbcr0;
|
||||
mtspr(SPRN_DBCR0, dbcr0);
|
||||
}
|
||||
#endif /* CONFIG_PPC64_BOOK3E */
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
/*
|
||||
* Collect processor utilization data per process
|
||||
|
Loading…
Reference in New Issue
Block a user