Re: [PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
On Mon, Jun 07, 2021 at 07:48:54AM +0200, Christophe Leroy wrote: > Hi Kefeng, > > What you could do is to define a __weak function that architectures can > override and call that function from mm_init() as suggested by Mike, The problem with weak functions is that they bloat the kernel. Each time a weak function is overriden, it becomes dead unreachable code within the kernel image. At some point we're probabily going to have to enable -ffunction-sections to (hopefully) allow the dead code to be discarded. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
Re: [PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
On 2021/6/7 13:48, Christophe Leroy wrote: Hi Kefeng, Le 07/06/2021 à 02:55, Kefeng Wang a écrit : On 2021/6/7 5:29, Mike Rapoport wrote: Hello Kefeng, On Fri, Jun 04, 2021 at 03:06:18PM +0800, Kefeng Wang wrote: Add setup_initial_init_mm() helper, then use it to cleanup the text, data and brk setup code. v2: - change argument from "char *" to "void *" setup_initial_init_mm() suggested by Geert Uytterhoeven - use NULL instead of (void *)0 on h8300 and m68k - collect ACKs Cc: linux-snps-...@lists.infradead.org Cc: linux-arm-ker...@lists.infradead.org Cc: linux-c...@vger.kernel.org Cc: uclinux-h8-de...@lists.sourceforge.jp Cc: linux-m...@lists.linux-m68k.org Cc: openr...@lists.librecores.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-ri...@lists.infradead.org Cc: linux...@vger.kernel.org Cc: linux-s...@vger.kernel.org Kefeng Wang (15): mm: add setup_initial_init_mm() helper arc: convert to setup_initial_init_mm() arm: convert to setup_initial_init_mm() arm64: convert to setup_initial_init_mm() csky: convert to setup_initial_init_mm() h8300: convert to setup_initial_init_mm() m68k: convert to setup_initial_init_mm() nds32: convert to setup_initial_init_mm() nios2: convert to setup_initial_init_mm() openrisc: convert to setup_initial_init_mm() powerpc: convert to setup_initial_init_mm() riscv: convert to setup_initial_init_mm() s390: convert to setup_initial_init_mm() sh: convert to setup_initial_init_mm() x86: convert to setup_initial_init_mm() I might be missing something, but AFAIU the init_mm.start_code and other fields are not used really early so the new setup_initial_init_mm() function can be called in the generic code outside setup_arch(), e.g in mm_init(). Hi Mike, each architecture has their own value, not the same, eg m68K and h8300, also the name of the text/code/brk is different in some arch, so I keep unchanged. What you could do is to define a __weak function that architectures can override and call that function from mm_init() as suggested by Mike, Something like: void __weak setup_initial_init_mm(void) { init_mm.start_code = (unsigned long)_stext; init_mm.end_code = (unsigned long)_etext; init_mm.end_data = (unsigned long)_edata; init_mm.brk = (unsigned long)_end; } Then only the few architecture that are different would override it. I see a few archictectures are usigne PAGE_OFFSET to set .start_code, but it is likely that this is equivalent to _stext. Yes, the __weak function is option, but the change is only covered 14 archs, there are 7 other archs(alpha hexagon ia64 microblaze mips sparc um xtensa)without related setup code. Also like x86, it has own brk , maybe there are some other different in some arch, so I think let's keep unchanged for now, thanks. Christophe .
Re: [PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
Hi Kefeng, Le 07/06/2021 à 02:55, Kefeng Wang a écrit : On 2021/6/7 5:29, Mike Rapoport wrote: Hello Kefeng, On Fri, Jun 04, 2021 at 03:06:18PM +0800, Kefeng Wang wrote: Add setup_initial_init_mm() helper, then use it to cleanup the text, data and brk setup code. v2: - change argument from "char *" to "void *" setup_initial_init_mm() suggested by Geert Uytterhoeven - use NULL instead of (void *)0 on h8300 and m68k - collect ACKs Cc: linux-snps-...@lists.infradead.org Cc: linux-arm-ker...@lists.infradead.org Cc: linux-c...@vger.kernel.org Cc: uclinux-h8-de...@lists.sourceforge.jp Cc: linux-m...@lists.linux-m68k.org Cc: openr...@lists.librecores.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-ri...@lists.infradead.org Cc: linux...@vger.kernel.org Cc: linux-s...@vger.kernel.org Kefeng Wang (15): mm: add setup_initial_init_mm() helper arc: convert to setup_initial_init_mm() arm: convert to setup_initial_init_mm() arm64: convert to setup_initial_init_mm() csky: convert to setup_initial_init_mm() h8300: convert to setup_initial_init_mm() m68k: convert to setup_initial_init_mm() nds32: convert to setup_initial_init_mm() nios2: convert to setup_initial_init_mm() openrisc: convert to setup_initial_init_mm() powerpc: convert to setup_initial_init_mm() riscv: convert to setup_initial_init_mm() s390: convert to setup_initial_init_mm() sh: convert to setup_initial_init_mm() x86: convert to setup_initial_init_mm() I might be missing something, but AFAIU the init_mm.start_code and other fields are not used really early so the new setup_initial_init_mm() function can be called in the generic code outside setup_arch(), e.g in mm_init(). Hi Mike, each architecture has their own value, not the same, eg m68K and h8300, also the name of the text/code/brk is different in some arch, so I keep unchanged. What you could do is to define a __weak function that architectures can override and call that function from mm_init() as suggested by Mike, Something like: void __weak setup_initial_init_mm(void) { init_mm.start_code = (unsigned long)_stext; init_mm.end_code = (unsigned long)_etext; init_mm.end_data = (unsigned long)_edata; init_mm.brk = (unsigned long)_end; } Then only the few architecture that are different would override it. I see a few archictectures are usigne PAGE_OFFSET to set .start_code, but it is likely that this is equivalent to _stext. Christophe
Re: [PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
On 2021/6/7 5:29, Mike Rapoport wrote: Hello Kefeng, On Fri, Jun 04, 2021 at 03:06:18PM +0800, Kefeng Wang wrote: Add setup_initial_init_mm() helper, then use it to cleanup the text, data and brk setup code. v2: - change argument from "char *" to "void *" setup_initial_init_mm() suggested by Geert Uytterhoeven - use NULL instead of (void *)0 on h8300 and m68k - collect ACKs Cc: linux-snps-...@lists.infradead.org Cc: linux-arm-ker...@lists.infradead.org Cc: linux-c...@vger.kernel.org Cc: uclinux-h8-de...@lists.sourceforge.jp Cc: linux-m...@lists.linux-m68k.org Cc: openr...@lists.librecores.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-ri...@lists.infradead.org Cc: linux...@vger.kernel.org Cc: linux-s...@vger.kernel.org Kefeng Wang (15): mm: add setup_initial_init_mm() helper arc: convert to setup_initial_init_mm() arm: convert to setup_initial_init_mm() arm64: convert to setup_initial_init_mm() csky: convert to setup_initial_init_mm() h8300: convert to setup_initial_init_mm() m68k: convert to setup_initial_init_mm() nds32: convert to setup_initial_init_mm() nios2: convert to setup_initial_init_mm() openrisc: convert to setup_initial_init_mm() powerpc: convert to setup_initial_init_mm() riscv: convert to setup_initial_init_mm() s390: convert to setup_initial_init_mm() sh: convert to setup_initial_init_mm() x86: convert to setup_initial_init_mm() I might be missing something, but AFAIU the init_mm.start_code and other fields are not used really early so the new setup_initial_init_mm() function can be called in the generic code outside setup_arch(), e.g in mm_init(). Hi Mike, each architecture has their own value, not the same, eg m68K and h8300, also the name of the text/code/brk is different in some arch, so I keep unchanged. arch/arc/mm/init.c | 5 + arch/arm/kernel/setup.c| 5 + arch/arm64/kernel/setup.c | 5 + arch/csky/kernel/setup.c | 5 + arch/h8300/kernel/setup.c | 5 + arch/m68k/kernel/setup_mm.c| 5 + arch/m68k/kernel/setup_no.c| 5 + arch/nds32/kernel/setup.c | 5 + arch/nios2/kernel/setup.c | 5 + arch/openrisc/kernel/setup.c | 5 + arch/powerpc/kernel/setup-common.c | 5 + arch/riscv/kernel/setup.c | 5 + arch/s390/kernel/setup.c | 5 + arch/sh/kernel/setup.c | 5 + arch/x86/kernel/setup.c| 5 + include/linux/mm_types.h | 8 16 files changed, 23 insertions(+), 60 deletions(-) -- 2.26.2 ___ linux-riscv mailing list linux-ri...@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
Re: [PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
Hello Kefeng, On Fri, Jun 04, 2021 at 03:06:18PM +0800, Kefeng Wang wrote: > Add setup_initial_init_mm() helper, then use it > to cleanup the text, data and brk setup code. > > v2: > - change argument from "char *" to "void *" setup_initial_init_mm() > suggested by Geert Uytterhoeven > - use NULL instead of (void *)0 on h8300 and m68k > - collect ACKs > > Cc: linux-snps-...@lists.infradead.org > Cc: linux-arm-ker...@lists.infradead.org > Cc: linux-c...@vger.kernel.org > Cc: uclinux-h8-de...@lists.sourceforge.jp > Cc: linux-m...@lists.linux-m68k.org > Cc: openr...@lists.librecores.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: linux-ri...@lists.infradead.org > Cc: linux...@vger.kernel.org > Cc: linux-s...@vger.kernel.org > Kefeng Wang (15): > mm: add setup_initial_init_mm() helper > arc: convert to setup_initial_init_mm() > arm: convert to setup_initial_init_mm() > arm64: convert to setup_initial_init_mm() > csky: convert to setup_initial_init_mm() > h8300: convert to setup_initial_init_mm() > m68k: convert to setup_initial_init_mm() > nds32: convert to setup_initial_init_mm() > nios2: convert to setup_initial_init_mm() > openrisc: convert to setup_initial_init_mm() > powerpc: convert to setup_initial_init_mm() > riscv: convert to setup_initial_init_mm() > s390: convert to setup_initial_init_mm() > sh: convert to setup_initial_init_mm() > x86: convert to setup_initial_init_mm() I might be missing something, but AFAIU the init_mm.start_code and other fields are not used really early so the new setup_initial_init_mm() function can be called in the generic code outside setup_arch(), e.g in mm_init(). > arch/arc/mm/init.c | 5 + > arch/arm/kernel/setup.c| 5 + > arch/arm64/kernel/setup.c | 5 + > arch/csky/kernel/setup.c | 5 + > arch/h8300/kernel/setup.c | 5 + > arch/m68k/kernel/setup_mm.c| 5 + > arch/m68k/kernel/setup_no.c| 5 + > arch/nds32/kernel/setup.c | 5 + > arch/nios2/kernel/setup.c | 5 + > arch/openrisc/kernel/setup.c | 5 + > arch/powerpc/kernel/setup-common.c | 5 + > arch/riscv/kernel/setup.c | 5 + > arch/s390/kernel/setup.c | 5 + > arch/sh/kernel/setup.c | 5 + > arch/x86/kernel/setup.c| 5 + > include/linux/mm_types.h | 8 > 16 files changed, 23 insertions(+), 60 deletions(-) > > -- > 2.26.2 > > > ___ > linux-riscv mailing list > linux-ri...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv -- Sincerely yours, Mike.
[PATCH v2 00/15] init_mm: cleanup ARCH's text/data/brk setup code
Add setup_initial_init_mm() helper, then use it to cleanup the text, data and brk setup code. v2: - change argument from "char *" to "void *" setup_initial_init_mm() suggested by Geert Uytterhoeven - use NULL instead of (void *)0 on h8300 and m68k - collect ACKs Cc: linux-snps-...@lists.infradead.org Cc: linux-arm-ker...@lists.infradead.org Cc: linux-c...@vger.kernel.org Cc: uclinux-h8-de...@lists.sourceforge.jp Cc: linux-m...@lists.linux-m68k.org Cc: openr...@lists.librecores.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-ri...@lists.infradead.org Cc: linux...@vger.kernel.org Cc: linux-s...@vger.kernel.org Kefeng Wang (15): mm: add setup_initial_init_mm() helper arc: convert to setup_initial_init_mm() arm: convert to setup_initial_init_mm() arm64: convert to setup_initial_init_mm() csky: convert to setup_initial_init_mm() h8300: convert to setup_initial_init_mm() m68k: convert to setup_initial_init_mm() nds32: convert to setup_initial_init_mm() nios2: convert to setup_initial_init_mm() openrisc: convert to setup_initial_init_mm() powerpc: convert to setup_initial_init_mm() riscv: convert to setup_initial_init_mm() s390: convert to setup_initial_init_mm() sh: convert to setup_initial_init_mm() x86: convert to setup_initial_init_mm() arch/arc/mm/init.c | 5 + arch/arm/kernel/setup.c| 5 + arch/arm64/kernel/setup.c | 5 + arch/csky/kernel/setup.c | 5 + arch/h8300/kernel/setup.c | 5 + arch/m68k/kernel/setup_mm.c| 5 + arch/m68k/kernel/setup_no.c| 5 + arch/nds32/kernel/setup.c | 5 + arch/nios2/kernel/setup.c | 5 + arch/openrisc/kernel/setup.c | 5 + arch/powerpc/kernel/setup-common.c | 5 + arch/riscv/kernel/setup.c | 5 + arch/s390/kernel/setup.c | 5 + arch/sh/kernel/setup.c | 5 + arch/x86/kernel/setup.c| 5 + include/linux/mm_types.h | 8 16 files changed, 23 insertions(+), 60 deletions(-) -- 2.26.2