powerpc: Remove fp_enable() and vec_enable(), use msr_check_and_{set, clear}()
authorAnton Blanchard <anton@samba.org>
Thu, 29 Oct 2015 00:44:07 +0000 (11:44 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 1 Dec 2015 02:52:26 +0000 (13:52 +1100)
More consolidation of our MSR available bit handling.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/processor.h
arch/powerpc/kernel/fpu.S
arch/powerpc/kernel/process.c
arch/powerpc/kernel/vector.S

index a2e8918..ac23308 100644 (file)
@@ -380,8 +380,6 @@ extern int set_endian(struct task_struct *tsk, unsigned int val);
 extern int get_unalign_ctl(struct task_struct *tsk, unsigned long adr);
 extern int set_unalign_ctl(struct task_struct *tsk, unsigned int val);
 
-extern void fp_enable(void);
-extern void vec_enable(void);
 extern void load_fp_state(struct thread_fp_state *fp);
 extern void store_fp_state(struct thread_fp_state *fp);
 extern void load_vr_state(struct thread_vr_state *vr);
index 431ab57..2117eac 100644 (file)
@@ -76,22 +76,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
        blr
 #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
 
-/*
- * Enable use of the FPU, and VSX if possible, for the caller.
- */
-_GLOBAL(fp_enable)
-       mfmsr   r3
-       ori     r3,r3,MSR_FP
-#ifdef CONFIG_VSX
-BEGIN_FTR_SECTION
-       oris    r3,r3,MSR_VSX@h
-END_FTR_SECTION_IFSET(CPU_FTR_VSX)
-#endif
-       SYNC
-       MTMSRD(r3)
-       isync                   /* (not necessary for arch 2.02 and later) */
-       blr
-
 /*
  * Load state from memory into FP registers including FPSCR.
  * Assumes the caller has enabled FP in the MSR.
index 1eafcee..9f8444b 100644 (file)
@@ -732,13 +732,15 @@ void restore_tm_state(struct pt_regs *regs)
        msr_diff = current->thread.ckpt_regs.msr & ~regs->msr;
        msr_diff &= MSR_FP | MSR_VEC | MSR_VSX;
        if (msr_diff & MSR_FP) {
-               fp_enable();
+               msr_check_and_set(MSR_FP);
                load_fp_state(&current->thread.fp_state);
+               msr_check_and_clear(MSR_FP);
                regs->msr |= current->thread.fpexc_mode;
        }
        if (msr_diff & MSR_VEC) {
-               vec_enable();
+               msr_check_and_set(MSR_VEC);
                load_vr_state(&current->thread.vr_state);
+               msr_check_and_clear(MSR_VEC);
        }
        regs->msr |= msr_diff;
 }
index 98675b0..162d0f7 100644 (file)
@@ -32,16 +32,6 @@ _GLOBAL(do_load_up_transact_altivec)
        blr
 #endif
 
-/*
- * Enable use of VMX/Altivec for the caller.
- */
-_GLOBAL(vec_enable)
-       mfmsr   r3
-       oris    r3,r3,MSR_VEC@h
-       MTMSRD(r3)
-       isync
-       blr
-
 /*
  * Load state from memory into VMX registers including VSCR.
  * Assumes the caller has enabled VMX in the MSR.