浏览代码

[POWERPC] Flush registers to proper task context

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>
Kumar Gala 17 年之前
父节点
当前提交
0ee6c15e7b
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      arch/powerpc/kernel/process.c

+ 3 - 3
arch/powerpc/kernel/process.c

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