|
@@ -445,6 +445,12 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
|
#endif /* CONFIG_ALTIVEC */
|
|
#endif /* CONFIG_ALTIVEC */
|
|
if (copy_fpr_to_user(&frame->mc_fregs, current))
|
|
if (copy_fpr_to_user(&frame->mc_fregs, current))
|
|
return 1;
|
|
return 1;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Clear the MSR VSX bit to indicate there is no valid state attached
|
|
|
|
+ * to this context, except in the specific case below where we set it.
|
|
|
|
+ */
|
|
|
|
+ msr &= ~MSR_VSX;
|
|
#ifdef CONFIG_VSX
|
|
#ifdef CONFIG_VSX
|
|
/*
|
|
/*
|
|
* Copy VSR 0-31 upper half from thread_struct to local
|
|
* Copy VSR 0-31 upper half from thread_struct to local
|
|
@@ -457,15 +463,7 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
|
if (copy_vsx_to_user(&frame->mc_vsregs, current))
|
|
if (copy_vsx_to_user(&frame->mc_vsregs, current))
|
|
return 1;
|
|
return 1;
|
|
msr |= MSR_VSX;
|
|
msr |= MSR_VSX;
|
|
- } else if (!ctx_has_vsx_region)
|
|
|
|
- /*
|
|
|
|
- * With a small context structure we can't hold the VSX
|
|
|
|
- * registers, hence clear the MSR value to indicate the state
|
|
|
|
- * was not saved.
|
|
|
|
- */
|
|
|
|
- msr &= ~MSR_VSX;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
#endif /* CONFIG_VSX */
|
|
#endif /* CONFIG_VSX */
|
|
#ifdef CONFIG_SPE
|
|
#ifdef CONFIG_SPE
|
|
/* save spe registers */
|
|
/* save spe registers */
|