]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
POWERPC: Flush registers to proper task context
authorKumar Gala <galak@kernel.crashing.org>
Wed, 29 Aug 2007 02:15:53 +0000 (21:15 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 26 Sep 2007 17:54:38 +0000 (10:54 -0700)
commit 0ee6c15e7ba7b36a217cdadb292eeaf32a057a59 in mainline.

When we flush register state for FP, Altivec, or SPE in flush_*_to_thread
we need to respect the task_struct that the caller has passed to us.

Most cases we are called with current, however sometimes (ptrace) we may
be passed a different task_struct.

This showed up when using gdbserver debugging a simple program that used
floating point. When gdb tried to show the FP regs they all showed up as
0, because the child's FP registers were never properly flushed to memory.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/powerpc/kernel/process.c

index 6e2f03566b0dd8973f15bc4fac732ce4ff654692..87c474d125d7a6cd4090480c3998dca890a05b05 100644 (file)
@@ -83,7 +83,7 @@ void flush_fp_to_thread(struct task_struct *tsk)
                         */
                        BUG_ON(tsk != current);
 #endif
-                       giveup_fpu(current);
+                       giveup_fpu(tsk);
                }
                preempt_enable();
        }
@@ -143,7 +143,7 @@ void flush_altivec_to_thread(struct task_struct *tsk)
 #ifdef CONFIG_SMP
                        BUG_ON(tsk != current);
 #endif
-                       giveup_altivec(current);
+                       giveup_altivec(tsk);
                }
                preempt_enable();
        }
@@ -182,7 +182,7 @@ void flush_spe_to_thread(struct task_struct *tsk)
 #ifdef CONFIG_SMP
                        BUG_ON(tsk != current);
 #endif
-                       giveup_spe(current);
+                       giveup_spe(tsk);
                }
                preempt_enable();
        }