On Sun, Mar 29, 2020 at 8:34 AM Hauke Mehrtens <ha...@hauke-m.de> wrote: > > On 3/27/20 5:28 AM, Yousong Zhou wrote: > > The patch is backported from mips-next. In addition to minor reduction > > of code size and runtime memory use, the more apparent difference is > > that the delay slot emulation page will not be present for those targets > > with fpu emulation disabled (CONFIG_MIPS_FP_SUPPORT=n) > > > > Memory maps of busybox before and after this change > > > > root@OpenWrt:/# cat /proc/self/maps > > 00400000-00449000 r-xp 00000000 00:02 23 /bin/busybox > > 00458000-00459000 r-xp 00048000 00:02 23 /bin/busybox > > 00459000-0045a000 rwxp 00049000 00:02 23 /bin/busybox > > 77dc0000-77de2000 r-xp 00000000 00:02 273 /lib/libgcc_s.so.1 > > 77de2000-77de3000 r-xp 00012000 00:02 273 /lib/libgcc_s.so.1 > > 77de3000-77de4000 rwxp 00013000 00:02 273 /lib/libgcc_s.so.1 > > 77de4000-77e7b000 r-xp 00000000 00:02 271 /lib/libc.so > > 77e8a000-77e8c000 rwxp 00096000 00:02 271 /lib/libc.so > > 77e8c000-77e8e000 rwxp 00000000 00:00 0 > > 7fd86000-7fda7000 rw-p 00000000 00:00 0 [stack] > > 7fefd000-7fefe000 r-xp 00000000 00:00 0 > > 7ffe6000-7ffe7000 r--p 00000000 00:00 0 [vvar] > > 7ffe7000-7ffe8000 r-xp 00000000 00:00 0 [vdso] > > > > root@OpenWrt:/# cat /proc/self/maps > > 00400000-00449000 r-xp 00000000 00:02 23 /bin/busybox > > 00458000-00459000 r-xp 00048000 00:02 23 /bin/busybox > > 00459000-0045a000 rwxp 00049000 00:02 23 /bin/busybox > > 77d55000-77d77000 r-xp 00000000 00:02 274 /lib/libgcc_s.so.1 > > 77d77000-77d78000 r-xp 00012000 00:02 274 /lib/libgcc_s.so.1 > > 77d78000-77d79000 rwxp 00013000 00:02 274 /lib/libgcc_s.so.1 > > 77d79000-77e10000 r-xp 00000000 00:02 272 /lib/libc.so > > 77e1f000-77e21000 rwxp 00096000 00:02 272 /lib/libc.so > > 77e21000-77e23000 rwxp 00000000 00:00 0 > > 7fe23000-7fe44000 rw-p 00000000 00:00 0 [stack] > > 7ff63000-7ff64000 r--p 00000000 00:00 0 [vvar] > > 7ff64000-7ff65000 r-xp 00000000 00:00 0 [vdso] > > > > Signed-off-by: Yousong Zhou <yszhou4t...@gmail.com> > > Acked-by: Hauke Mehrtens <ha...@hauke-m.de> Acked-by: Rosen Penev <ros...@gmail.com>
I have the previous version of this patch (taken from ldir's tree) in my tree. Works great. Have not seen any problems. > > > --- > > ...e-dsemul-code-when-CONFIG_MIPS_FP_SU.patch | 140 ++++++++++++++++++ > > 1 file changed, 140 insertions(+) > > create mode 100644 > > target/linux/generic/backport-5.4/300-MIPS-Exclude-more-dsemul-code-when-CONFIG_MIPS_FP_SU.patch > > > > diff --git > > a/target/linux/generic/backport-5.4/300-MIPS-Exclude-more-dsemul-code-when-CONFIG_MIPS_FP_SU.patch > > > > b/target/linux/generic/backport-5.4/300-MIPS-Exclude-more-dsemul-code-when-CONFIG_MIPS_FP_SU.patch > > new file mode 100644 > > index 0000000000..1be051e1df > > --- /dev/null > > +++ > > b/target/linux/generic/backport-5.4/300-MIPS-Exclude-more-dsemul-code-when-CONFIG_MIPS_FP_SU.patch > > @@ -0,0 +1,140 @@ > > +From d96c3157f9ca177727fbad960fcf6f52f145f471 Mon Sep 17 00:00:00 2001 > > +From: Yousong Zhou <yszhou4t...@gmail.com> > > +Date: Thu, 9 Jan 2020 11:33:19 +0800 > > +Subject: [PATCH] MIPS: Exclude more dsemul code when > > CONFIG_MIPS_FP_SUPPORT=n > > + > > +This furthers what commit 42b10815d559 ("MIPS: Don't compile math-emu > > +when CONFIG_MIPS_FP_SUPPORT=n") has done > > + > > +Signed-off-by: Yousong Zhou <yszhou4t...@gmail.com> > > +--- > > + arch/mips/include/asm/processor.h | 12 ++++++------ > > + arch/mips/kernel/process.c | 10 ++++++++-- > > + arch/mips/kernel/vdso.c | 26 +++++++++++++++----------- > > + 3 files changed, 29 insertions(+), 19 deletions(-) > > + > > +diff --git a/arch/mips/include/asm/processor.h > > b/arch/mips/include/asm/processor.h > > +index 7619ad319400..813ba94d87bb 100644 > > +--- a/arch/mips/include/asm/processor.h > > ++++ b/arch/mips/include/asm/processor.h > > +@@ -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 \ > > + */ \ > > +diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c > > +index 339870ed92f7..b2a797557825 100644 > > +--- a/arch/mips/kernel/process.c > > ++++ b/arch/mips/kernel/process.c > > +@@ -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; > > +@@ -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); > > +diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c > > +index bc35f8499111..3adb7354bc01 100644 > > +--- a/arch/mips/kernel/vdso.c > > ++++ b/arch/mips/kernel/vdso.c > > +@@ -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; > > ++ } > > + } > > + > > + /* > > > > _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel