Re: [PATCH] percpu: km: ensure it is used with NOMMU (either UP or SMP)
From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2021-12-14 20:12:41
Also in:
linux-riscv, linux-sh
Hi Dennis, On Tue, Dec 14, 2021 at 8:18 PM Dennis Zhou [off-list ref] wrote:
On Tue, Dec 14, 2021 at 08:02:58PM +0100, Geert Uytterhoeven wrote:quoted
On Tue, Dec 14, 2021 at 6:26 PM Dennis Zhou [off-list ref] wrote:quoted
On Tue, Dec 14, 2021 at 05:29:22PM +0100, Geert Uytterhoeven wrote:quoted
On Wed, Dec 1, 2021 at 12:53 PM Vladimir Murzin [off-list ref] wrote:quoted
On 11/30/21 5:41 PM, Dennis Zhou wrote:quoted
On Tue, Nov 30, 2021 at 05:29:54PM +0000, Vladimir Murzin wrote:quoted
Currently, NOMMU pull km allocator via !SMP dependency because most of them are UP, yet for SMP+NOMMU vm allocator gets pulled which: * may lead to broken build [1] * ...or not working runtime due to [2] It looks like SMP+NOMMU case was overlooked in bbddff054587 ("percpu: use percpu allocator on UP too") so restore that. [1] For ARM SMP+NOMMU (R-class cores) arm-none-linux-gnueabihf-ld: mm/percpu.o: in function `pcpu_post_unmap_tlb_flush': mm/percpu-vm.c:188: undefined reference to `flush_tlb_kernel_range' [2] static inline int vmap_pages_range_noflush(unsigned long addr, unsigned long end, pgprot_t prot, struct page **pages, unsigned int page_shift) { return -EINVAL; } Signed-off-by: Vladimir Murzin <redacted>
quoted
quoted
quoted
quoted
IIRC, RISC-V also have SMP+NOMMU, so adding them as well.I had seen the j-Core thread, but completely forgot about Canaan K210 (RV64 SMP+NOMMU). This became commit 3583521aabac76e5 ("percpu: km: ensure it is used with NOMMU (either UP or SMP)"). And now booting K210 prints: percpu: wasting 10 pages per chunk a) Is this bad?It's not great.. Can you share the line on boot with the following prefix: pcpu-alloc [1].There are no such lines. "make mm/percpu.i mm/percpu.s" and inspecting the generated files, and vmlinux, proves the code is there. But apparently it's not called. So there may be no issue on my system?I might be missing something, but that can't be right. Percpu calls pcpu_dump_alloc_info() from pcpu_setup_first_chunk() which is called by both embed/page first chunk code. Ummm. That can't be right. Percpu call pcpu_dump_alloc_info() from pcpu_setup_first_chunk() which everyone should call. On my machine: $ dmesg | grep "pcpu-alloc" [ 0.065118] pcpu-alloc: s184320 r8192 d28672 u262144 alloc=1*2097152
Doh, it wasn't printed to the console, due to KERN_DEBUG. Dmesg
does have it:
<7>[ 0.000000] pcpu-alloc: s15520 r0 d29536 u45056 alloc=11*4096
<7>[ 0.000000] pcpu-alloc: [0] 0 [0] 1
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds