Merge branch 'for-2.6.27' of git://linux-nfs.org/~bfields/linux
[pandora-kernel.git] / arch / powerpc / kernel / process.c
index d52ded3..219f363 100644 (file)
@@ -105,29 +105,6 @@ void enable_kernel_fp(void)
 }
 EXPORT_SYMBOL(enable_kernel_fp);
 
-int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs)
-{
-#ifdef CONFIG_VSX
-       int i;
-       elf_fpreg_t *reg;
-#endif
-
-       if (!tsk->thread.regs)
-               return 0;
-       flush_fp_to_thread(current);
-
-#ifdef CONFIG_VSX
-       reg = (elf_fpreg_t *)fpregs;
-       for (i = 0; i < ELF_NFPREG - 1; i++, reg++)
-               *reg = tsk->thread.TS_FPR(i);
-       memcpy(reg, &tsk->thread.fpscr, sizeof(elf_fpreg_t));
-#else
-       memcpy(fpregs, &tsk->thread.TS_FPR(0), sizeof(*fpregs));
-#endif
-
-       return 1;
-}
-
 #ifdef CONFIG_ALTIVEC
 void enable_kernel_altivec(void)
 {
@@ -161,35 +138,6 @@ void flush_altivec_to_thread(struct task_struct *tsk)
                preempt_enable();
        }
 }
-
-int dump_task_altivec(struct task_struct *tsk, elf_vrreg_t *vrregs)
-{
-       /* ELF_NVRREG includes the VSCR and VRSAVE which we need to save
-        * separately, see below */
-       const int nregs = ELF_NVRREG - 2;
-       elf_vrreg_t *reg;
-       u32 *dest;
-
-       if (tsk == current)
-               flush_altivec_to_thread(tsk);
-
-       reg = (elf_vrreg_t *)vrregs;
-
-       /* copy the 32 vr registers */
-       memcpy(reg, &tsk->thread.vr[0], nregs * sizeof(*reg));
-       reg += nregs;
-
-       /* copy the vscr */
-       memcpy(reg, &tsk->thread.vscr, sizeof(*reg));
-       reg++;
-
-       /* vrsave is stored in the high 32bit slot of the final 128bits */
-       memset(reg, 0, sizeof(*reg));
-       dest = (u32 *)reg;
-       *dest = tsk->thread.vrsave;
-
-       return 1;
-}
 #endif /* CONFIG_ALTIVEC */
 
 #ifdef CONFIG_VSX
@@ -211,6 +159,13 @@ void enable_kernel_vsx(void)
 EXPORT_SYMBOL(enable_kernel_vsx);
 #endif
 
+void giveup_vsx(struct task_struct *tsk)
+{
+       giveup_fpu(tsk);
+       giveup_altivec(tsk);
+       __giveup_vsx(tsk);
+}
+
 void flush_vsx_to_thread(struct task_struct *tsk)
 {
        if (tsk->thread.regs) {
@@ -224,48 +179,8 @@ void flush_vsx_to_thread(struct task_struct *tsk)
                preempt_enable();
        }
 }
-
-/*
- * This dumps the lower half 64bits of the first 32 VSX registers.
- * This needs to be called with dump_task_fp and dump_task_altivec to
- * get all the VSX state.
- */
-int dump_task_vsx(struct task_struct *tsk, elf_vrreg_t *vrregs)
-{
-       elf_vrreg_t *reg;
-       double buf[32];
-       int i;
-
-       if (tsk == current)
-               flush_vsx_to_thread(tsk);
-
-       reg = (elf_vrreg_t *)vrregs;
-
-       for (i = 0; i < 32 ; i++)
-               buf[i] = current->thread.fpr[i][TS_VSRLOWOFFSET];
-       memcpy(reg, buf, sizeof(buf));
-
-       return 1;
-}
 #endif /* CONFIG_VSX */
 
-int dump_task_vector(struct task_struct *tsk, elf_vrregset_t *vrregs)
-{
-       int rc = 0;
-       elf_vrreg_t *regs = (elf_vrreg_t *)vrregs;
-#ifdef CONFIG_ALTIVEC
-       rc = dump_task_altivec(tsk, regs);
-       if (rc)
-               return rc;
-       regs += ELF_NVRREG;
-#endif
-
-#ifdef CONFIG_VSX
-       rc = dump_task_vsx(tsk, regs);
-#endif
-       return rc;
-}
-
 #ifdef CONFIG_SPE
 
 void enable_kernel_spe(void)
@@ -296,14 +211,6 @@ void flush_spe_to_thread(struct task_struct *tsk)
                preempt_enable();
        }
 }
-
-int dump_spe(struct pt_regs *regs, elf_vrregset_t *evrregs)
-{
-       flush_spe_to_thread(current);
-       /* We copy u32 evr[32] + u64 acc + u32 spefscr -> 35 */
-       memcpy(evrregs, &current->thread.evr[0], sizeof(u32) * 35);
-       return 1;
-}
 #endif /* CONFIG_SPE */
 
 #ifndef CONFIG_SMP
@@ -390,7 +297,8 @@ struct task_struct *__switch_to(struct task_struct *prev,
 #endif /* CONFIG_ALTIVEC */
 #ifdef CONFIG_VSX
        if (prev->thread.regs && (prev->thread.regs->msr & MSR_VSX))
-               giveup_vsx(prev);
+               /* VMX and FPU registers are already save here */
+               __giveup_vsx(prev);
 #endif /* CONFIG_VSX */
 #ifdef CONFIG_SPE
        /*
@@ -585,10 +493,8 @@ void show_regs(struct pt_regs * regs)
         * Lookup NIP late so we have the best change of getting the
         * above info out without failing
         */
-       printk("NIP ["REG"] ", regs->nip);
-       print_symbol("%s\n", regs->nip);
-       printk("LR ["REG"] ", regs->link);
-       print_symbol("%s\n", regs->link);
+       printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip);
+       printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link);
 #endif
        show_stack(current, (unsigned long *) regs->gpr[1]);
        if (!user_mode(regs))
@@ -1076,8 +982,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                newsp = stack[0];
                ip = stack[STACK_FRAME_LR_SAVE];
                if (!firstframe || ip != lr) {
-                       printk("["REG"] ["REG"] ", sp, ip);
-                       print_symbol("%s", ip);
+                       printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
                        if (firstframe)
                                printk(" (unreliable)");
                        printk("\n");
@@ -1092,10 +997,9 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                    && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
                        struct pt_regs *regs = (struct pt_regs *)
                                (sp + STACK_FRAME_OVERHEAD);
-                       printk("--- Exception: %lx", regs->trap);
-                       print_symbol(" at %s\n", regs->nip);
                        lr = regs->link;
-                       print_symbol("    LR = %s\n", lr);
+                       printk("--- Exception: %lx at %pS\n    LR = %pS\n",
+                              regs->trap, (void *)regs->nip, (void *)lr);
                        firstframe = 1;
                }