MIPS: Exclude more dsemul code when CONFIG_MIPS_FP_SUPPORT=n
authorYousong Zhou <yszhou4tech@gmail.com>
Tue, 24 Mar 2020 15:27:51 +0000 (23:27 +0800)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Wed, 25 Mar 2020 15:07:14 +0000 (16:07 +0100)
This furthers what commit 42b10815d559 ("MIPS: Don't compile math-emu
when CONFIG_MIPS_FP_SUPPORT=n") has done

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/include/asm/processor.h
arch/mips/kernel/process.c
arch/mips/kernel/vdso.c

index 7619ad319400c7ebe99a44748afc0be0381fe0cc..813ba94d87bbe0617f31a8d4abefdc8168b8e7b6 100644 (file)
@@ -253,13 +253,13 @@ struct thread_struct {
 #ifdef CONFIG_MIPS_FP_SUPPORT
        /* Saved fpu/fpu emulator stuff. */
        struct mips_fpu_struct fpu FPU_ALIGN;
-#endif
        /* Assigned branch delay slot 'emulation' frame */
        atomic_t bd_emu_frame;
        /* PC of the branch from a branch delay slot 'emulation' */
        unsigned long bd_emu_branch_pc;
        /* PC to continue from following a branch delay slot 'emulation' */
        unsigned long bd_emu_cont_pc;
+#endif
 #ifdef CONFIG_MIPS_MT_FPAFF
        /* Emulated instruction count */
        unsigned long emulated_fp;
@@ -302,7 +302,11 @@ struct thread_struct {
                .fpr            = {{{0,},},},                   \
                .fcr31          = 0,                            \
                .msacsr         = 0,                            \
-       },
+       },                                                      \
+       /* Delay slot emulation */                              \
+       .bd_emu_frame = ATOMIC_INIT(BD_EMUFRAME_NONE),          \
+       .bd_emu_branch_pc = 0,                                  \
+       .bd_emu_cont_pc = 0,
 #else
 # define FPU_INIT
 #endif
@@ -334,10 +338,6 @@ struct thread_struct {
         * FPU affinity state (null if not FPAFF)               \
         */                                                     \
        FPAFF_INIT                                              \
-       /* Delay slot emulation */                              \
-       .bd_emu_frame = ATOMIC_INIT(BD_EMUFRAME_NONE),          \
-       .bd_emu_branch_pc = 0,                                  \
-       .bd_emu_cont_pc = 0,                                    \
        /*                                                      \
         * Saved DSP stuff                                      \
         */                                                     \
index 339870ed92f79c99e9a0678f9493bbfcaab5787b..b2a79755782574f462d0fdd8713fe81221d39e5b 100644 (file)
@@ -75,7 +75,9 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp)
        lose_fpu(0);
        clear_thread_flag(TIF_MSA_CTX_LIVE);
        clear_used_math();
+#ifdef CONFIG_MIPS_FP_SUPPORT
        atomic_set(&current->thread.bd_emu_frame, BD_EMUFRAME_NONE);
+#endif
        init_dsp();
        regs->cp0_epc = pc;
        regs->regs[29] = sp;
@@ -176,7 +178,9 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long usp,
        clear_tsk_thread_flag(p, TIF_FPUBOUND);
 #endif /* CONFIG_MIPS_MT_FPAFF */
 
+#ifdef CONFIG_MIPS_FP_SUPPORT
        atomic_set(&p->thread.bd_emu_frame, BD_EMUFRAME_NONE);
+#endif
 
        if (clone_flags & CLONE_SETTLS)
                ti->tp_value = tls;
@@ -650,8 +654,10 @@ unsigned long mips_stack_top(void)
 {
        unsigned long top = TASK_SIZE & PAGE_MASK;
 
-       /* One page for branch delay slot "emulation" */
-       top -= PAGE_SIZE;
+       if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) {
+               /* One page for branch delay slot "emulation" */
+               top -= PAGE_SIZE;
+       }
 
        /* Space for the VDSO, data page & GIC user page */
        top -= PAGE_ALIGN(current->thread.abi->vdso->size);
index bc35f8499111b30be22bc4e8891c5459714ec088..3adb7354bc017c655e8a0365dcb00f4bd332a652 100644 (file)
@@ -71,10 +71,12 @@ subsys_initcall(init_vdso);
 
 static unsigned long vdso_base(void)
 {
-       unsigned long base;
+       unsigned long base = STACK_TOP;
 
-       /* Skip the delay slot emulation page */
-       base = STACK_TOP + PAGE_SIZE;
+       if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) {
+               /* Skip the delay slot emulation page */
+               base += PAGE_SIZE;
+       }
 
        if (current->flags & PF_RANDOMIZE) {
                base += get_random_int() & (VDSO_RANDOMIZE_SIZE - 1);
@@ -95,14 +97,16 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
        if (down_write_killable(&mm->mmap_sem))
                return -EINTR;
 
-       /* Map delay slot emulation page */
-       base = mmap_region(NULL, STACK_TOP, PAGE_SIZE,
-                          VM_READ | VM_EXEC |
-                          VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
-                          0, NULL);
-       if (IS_ERR_VALUE(base)) {
-               ret = base;
-               goto out;
+       if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) {
+               /* Map delay slot emulation page */
+               base = mmap_region(NULL, STACK_TOP, PAGE_SIZE,
+                               VM_READ | VM_EXEC |
+                               VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
+                               0, NULL);
+               if (IS_ERR_VALUE(base)) {
+                       ret = base;
+                       goto out;
+               }
        }
 
        /*