powerpc/book3e: Hack to get gdb moving along on Book3E 64-bit
[deliverable/linux.git] / arch / powerpc / kernel / process.c
index 1e78453645bee86742422c3095c6d64508f32017..551f6713ff428930bcfa35556bd5ebd8676c30f4 100644 (file)
@@ -477,6 +477,28 @@ struct task_struct *__switch_to(struct task_struct *prev,
        new_thread = &new->thread;
        old_thread = &current->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
This page took 0.025142 seconds and 5 git commands to generate.