Loading arch/mips/include/asm/processor.h +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 \ */ \ Loading arch/mips/kernel/process.c +8 −2 Original line number Diff line number Diff line Loading @@ -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(¤t->thread.bd_emu_frame, BD_EMUFRAME_NONE); #endif init_dsp(); regs->cp0_epc = pc; regs->regs[29] = sp; Loading Loading @@ -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; Loading Loading @@ -650,8 +654,10 @@ unsigned long mips_stack_top(void) { unsigned long top = TASK_SIZE & PAGE_MASK; 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); Loading arch/mips/kernel/vdso.c +15 −11 Original line number Diff line number Diff line Loading @@ -71,10 +71,12 @@ subsys_initcall(init_vdso); static unsigned long vdso_base(void) { unsigned long base; unsigned long base = STACK_TOP; if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) { /* Skip the delay slot emulation page */ base = STACK_TOP + PAGE_SIZE; base += PAGE_SIZE; } if (current->flags & PF_RANDOMIZE) { base += get_random_int() & (VDSO_RANDOMIZE_SIZE - 1); Loading @@ -95,6 +97,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) if (down_write_killable(&mm->mmap_sem)) return -EINTR; if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) { /* Map delay slot emulation page */ base = mmap_region(NULL, STACK_TOP, PAGE_SIZE, VM_READ | VM_EXEC | Loading @@ -104,6 +107,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) ret = base; goto out; } } /* * Determine total area size. This includes the VDSO data itself, the Loading Loading
arch/mips/include/asm/processor.h +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 \ */ \ Loading
arch/mips/kernel/process.c +8 −2 Original line number Diff line number Diff line Loading @@ -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(¤t->thread.bd_emu_frame, BD_EMUFRAME_NONE); #endif init_dsp(); regs->cp0_epc = pc; regs->regs[29] = sp; Loading Loading @@ -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; Loading Loading @@ -650,8 +654,10 @@ unsigned long mips_stack_top(void) { unsigned long top = TASK_SIZE & PAGE_MASK; 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); Loading
arch/mips/kernel/vdso.c +15 −11 Original line number Diff line number Diff line Loading @@ -71,10 +71,12 @@ subsys_initcall(init_vdso); static unsigned long vdso_base(void) { unsigned long base; unsigned long base = STACK_TOP; if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) { /* Skip the delay slot emulation page */ base = STACK_TOP + PAGE_SIZE; base += PAGE_SIZE; } if (current->flags & PF_RANDOMIZE) { base += get_random_int() & (VDSO_RANDOMIZE_SIZE - 1); Loading @@ -95,6 +97,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) if (down_write_killable(&mm->mmap_sem)) return -EINTR; if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT)) { /* Map delay slot emulation page */ base = mmap_region(NULL, STACK_TOP, PAGE_SIZE, VM_READ | VM_EXEC | Loading @@ -104,6 +107,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) ret = base; goto out; } } /* * Determine total area size. This includes the VDSO data itself, the Loading