mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
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
2 changed files with 1 additions and 23 deletions
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#define MSR_ MSR_ME | MSR_CE
|
#define MSR_ MSR_ME | MSR_CE
|
||||||
#define MSR_KERNEL MSR_ | MSR_64BIT
|
#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
|
#define MSR_USER64 MSR_USER32 | MSR_64BIT
|
||||||
#elif defined (CONFIG_40x)
|
#elif defined (CONFIG_40x)
|
||||||
#define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE)
|
#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;
|
new_thread = &new->thread;
|
||||||
old_thread = ¤t->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
|
#ifdef CONFIG_PPC64
|
||||||
/*
|
/*
|
||||||
* Collect processor utilization data per process
|
* Collect processor utilization data per process
|
||||||
|
|
Loading…
Reference in a new issue