MIPS: Move & rename fpu_emulator_{save,restore}_context
authorPaul Burton <paul.burton@imgtec.com>
Mon, 27 Jan 2014 15:23:02 +0000 (15:23 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 26 Mar 2014 22:09:09 +0000 (23:09 +0100)
These functions aren't directly related to the FPU emulator at all, they
simply copy between a thread's saved context & a sigcontext. Thus move
them to the appropriate signal files & rename them accordingly. This
makes it clearer that the functions don't require the FPU emulator in
any way.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: Qais Yousef <qais.yousef@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6422/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/signal.c
arch/mips/kernel/signal32.c
arch/mips/math-emu/kernel_linkage.c

index 5199563c4403a5bb0cebbeaf85bb2aeca8b1b8c2..b7e4614d41b574161bd84779b7120edc39c77d91 100644 (file)
@@ -46,9 +46,6 @@ static int (*restore_fp_context)(struct sigcontext __user *sc);
 extern asmlinkage int _save_fp_context(struct sigcontext __user *sc);
 extern asmlinkage int _restore_fp_context(struct sigcontext __user *sc);
 
-extern asmlinkage int fpu_emulator_save_context(struct sigcontext __user *sc);
-extern asmlinkage int fpu_emulator_restore_context(struct sigcontext __user *sc);
-
 struct sigframe {
        u32 sf_ass[4];          /* argument save space for o32 */
        u32 sf_pad[2];          /* Was: signal trampoline */
@@ -63,6 +60,40 @@ struct rt_sigframe {
        struct ucontext rs_uc;
 };
 
+/*
+ * Thread saved context copy to/from a signal context presumed to be on the
+ * user stack, and therefore accessed with appropriate macros from uaccess.h.
+ */
+static int copy_fp_to_sigcontext(struct sigcontext __user *sc)
+{
+       int i;
+       int err = 0;
+
+       for (i = 0; i < 32; i++) {
+               err |=
+                   __put_user(get_fpr64(&current->thread.fpu.fpr[i], 0),
+                              &sc->sc_fpregs[i]);
+       }
+       err |= __put_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
+
+       return err;
+}
+
+static int copy_fp_from_sigcontext(struct sigcontext __user *sc)
+{
+       int i;
+       int err = 0;
+       u64 fpr_val;
+
+       for (i = 0; i < 32; i++) {
+               err |= __get_user(fpr_val, &sc->sc_fpregs[i]);
+               set_fpr64(&current->thread.fpu.fpr[i], 0, fpr_val);
+       }
+       err |= __get_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
+
+       return err;
+}
+
 /*
  * Helper routines
  */
@@ -595,14 +626,14 @@ static int smp_save_fp_context(struct sigcontext __user *sc)
 {
        return raw_cpu_has_fpu
               ? _save_fp_context(sc)
-              : fpu_emulator_save_context(sc);
+              : copy_fp_to_sigcontext(sc);
 }
 
 static int smp_restore_fp_context(struct sigcontext __user *sc)
 {
        return raw_cpu_has_fpu
               ? _restore_fp_context(sc)
-              : fpu_emulator_restore_context(sc);
+              : copy_fp_from_sigcontext(sc);
 }
 #endif
 
@@ -617,8 +648,8 @@ static int signal_setup(void)
                save_fp_context = _save_fp_context;
                restore_fp_context = _restore_fp_context;
        } else {
-               save_fp_context = fpu_emulator_save_context;
-               restore_fp_context = fpu_emulator_restore_context;
+               save_fp_context = copy_fp_from_sigcontext;
+               restore_fp_context = copy_fp_to_sigcontext;
        }
 #endif
 
index 3d60f7750fa8d873c4651cd362239a0441e24c72..dc09206d8c7bf7675825319f99fb1b29cfeed197 100644 (file)
@@ -42,9 +42,6 @@ static int (*restore_fp_context32)(struct sigcontext32 __user *sc);
 extern asmlinkage int _save_fp_context32(struct sigcontext32 __user *sc);
 extern asmlinkage int _restore_fp_context32(struct sigcontext32 __user *sc);
 
-extern asmlinkage int fpu_emulator_save_context32(struct sigcontext32 __user *sc);
-extern asmlinkage int fpu_emulator_restore_context32(struct sigcontext32 __user *sc);
-
 /*
  * Including <asm/unistd.h> would give use the 64-bit syscall numbers ...
  */
@@ -77,6 +74,42 @@ struct rt_sigframe32 {
        struct ucontext32 rs_uc;
 };
 
+/*
+ * Thread saved context copy to/from a signal context presumed to be on the
+ * user stack, and therefore accessed with appropriate macros from uaccess.h.
+ */
+static int copy_fp_to_sigcontext32(struct sigcontext32 __user *sc)
+{
+       int i;
+       int err = 0;
+       int inc = test_thread_flag(TIF_32BIT_FPREGS) ? 2 : 1;
+
+       for (i = 0; i < 32; i += inc) {
+               err |=
+                   __put_user(get_fpr64(&current->thread.fpu.fpr[i], 0),
+                              &sc->sc_fpregs[i]);
+       }
+       err |= __put_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
+
+       return err;
+}
+
+static int copy_fp_from_sigcontext32(struct sigcontext32 __user *sc)
+{
+       int i;
+       int err = 0;
+       int inc = test_thread_flag(TIF_32BIT_FPREGS) ? 2 : 1;
+       u64 fpr_val;
+
+       for (i = 0; i < 32; i += inc) {
+               err |= __get_user(fpr_val, &sc->sc_fpregs[i]);
+               set_fpr64(&current->thread.fpu.fpr[i], 0, fpr_val);
+       }
+       err |= __get_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
+
+       return err;
+}
+
 /*
  * sigcontext handlers
  */
@@ -566,8 +599,8 @@ static int signal32_init(void)
                save_fp_context32 = _save_fp_context32;
                restore_fp_context32 = _restore_fp_context32;
        } else {
-               save_fp_context32 = fpu_emulator_save_context32;
-               restore_fp_context32 = fpu_emulator_restore_context32;
+               save_fp_context32 = copy_fp_to_sigcontext32;
+               restore_fp_context32 = copy_fp_from_sigcontext32;
        }
 
        return 0;
index 9b46213b10350ca9084b996733f0ead6c2e65bd1..eb58a85b3157584c267d583554670afa2b12cf01 100644 (file)
@@ -43,78 +43,3 @@ void fpu_emulator_init_fpu(void)
        for (i = 0; i < 32; i++)
                set_fpr64(&current->thread.fpu.fpr[i], 0, SIGNALLING_NAN);
 }
-
-
-/*
- * Emulator context save/restore to/from a signal context
- * presumed to be on the user stack, and therefore accessed
- * with appropriate macros from uaccess.h
- */
-
-int fpu_emulator_save_context(struct sigcontext __user *sc)
-{
-       int i;
-       int err = 0;
-
-       for (i = 0; i < 32; i++) {
-               err |=
-                   __put_user(get_fpr64(&current->thread.fpu.fpr[i], 0),
-                              &sc->sc_fpregs[i]);
-       }
-       err |= __put_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
-
-       return err;
-}
-
-int fpu_emulator_restore_context(struct sigcontext __user *sc)
-{
-       int i;
-       int err = 0;
-       u64 fpr_val;
-
-       for (i = 0; i < 32; i++) {
-               err |= __get_user(fpr_val, &sc->sc_fpregs[i]);
-               set_fpr64(&current->thread.fpu.fpr[i], 0, fpr_val);
-       }
-       err |= __get_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
-
-       return err;
-}
-
-#ifdef CONFIG_64BIT
-/*
- * This is the o32 version
- */
-
-int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-{
-       int i;
-       int err = 0;
-       int inc = test_thread_flag(TIF_32BIT_FPREGS) ? 2 : 1;
-
-       for (i = 0; i < 32; i += inc) {
-               err |=
-                   __put_user(get_fpr64(&current->thread.fpu.fpr[i], 0),
-                              &sc->sc_fpregs[i]);
-       }
-       err |= __put_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
-
-       return err;
-}
-
-int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-{
-       int i;
-       int err = 0;
-       int inc = test_thread_flag(TIF_32BIT_FPREGS) ? 2 : 1;
-       u64 fpr_val;
-
-       for (i = 0; i < 32; i += inc) {
-               err |= __get_user(fpr_val, &sc->sc_fpregs[i]);
-               set_fpr64(&current->thread.fpu.fpr[i], 0, fpr_val);
-       }
-       err |= __get_user(current->thread.fpu.fcr31, &sc->sc_fpc_csr);
-
-       return err;
-}
-#endif