提交 3e12d0d3 编写于 作者: Y Yang Yingliang 提交者: Xie XiuQi

Revert "powerpc/tm: Fix restoring FP/VMX facility incorrectly on interrupts"

hulk inclusion
category: bugfix
bugzilla: 13690
CVE: NA

-------------------------------------------------

This reverts commit 74711645cf8a3058b353479c1d03ef85330219b1.
Use LTS patch instead of this patch.
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 90ec8b81
...@@ -106,9 +106,23 @@ static inline bool msr_tm_active(unsigned long msr) ...@@ -106,9 +106,23 @@ static inline bool msr_tm_active(unsigned long msr)
{ {
return MSR_TM_ACTIVE(msr); return MSR_TM_ACTIVE(msr);
} }
static bool tm_active_with_fp(struct task_struct *tsk)
{
return msr_tm_active(tsk->thread.regs->msr) &&
(tsk->thread.ckpt_regs.msr & MSR_FP);
}
static bool tm_active_with_altivec(struct task_struct *tsk)
{
return msr_tm_active(tsk->thread.regs->msr) &&
(tsk->thread.ckpt_regs.msr & MSR_VEC);
}
#else #else
static inline bool msr_tm_active(unsigned long msr) { return false; } static inline bool msr_tm_active(unsigned long msr) { return false; }
static inline void check_if_tm_restore_required(struct task_struct *tsk) { } static inline void check_if_tm_restore_required(struct task_struct *tsk) { }
static inline bool tm_active_with_fp(struct task_struct *tsk) { return false; }
static inline bool tm_active_with_altivec(struct task_struct *tsk) { return false; }
#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
bool strict_msr_control; bool strict_msr_control;
...@@ -242,7 +256,7 @@ EXPORT_SYMBOL(enable_kernel_fp); ...@@ -242,7 +256,7 @@ EXPORT_SYMBOL(enable_kernel_fp);
static int restore_fp(struct task_struct *tsk) static int restore_fp(struct task_struct *tsk)
{ {
if (tsk->thread.load_fp) { if (tsk->thread.load_fp || tm_active_with_fp(tsk)) {
load_fp_state(&current->thread.fp_state); load_fp_state(&current->thread.fp_state);
current->thread.load_fp++; current->thread.load_fp++;
return 1; return 1;
...@@ -323,7 +337,8 @@ EXPORT_SYMBOL_GPL(flush_altivec_to_thread); ...@@ -323,7 +337,8 @@ EXPORT_SYMBOL_GPL(flush_altivec_to_thread);
static int restore_altivec(struct task_struct *tsk) static int restore_altivec(struct task_struct *tsk)
{ {
if (cpu_has_feature(CPU_FTR_ALTIVEC) && (tsk->thread.load_vec)) { if (cpu_has_feature(CPU_FTR_ALTIVEC) &&
(tsk->thread.load_vec || tm_active_with_altivec(tsk))) {
load_vr_state(&tsk->thread.vr_state); load_vr_state(&tsk->thread.vr_state);
tsk->thread.used_vr = 1; tsk->thread.used_vr = 1;
tsk->thread.load_vec++; tsk->thread.load_vec++;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册