linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Song Shuai <songshuaishuai@tinylab.org>
To: Woody Zhang <woodylab@foxmail.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Alexandre Ghiti <alexghiti@rivosinc.com>,
	Conor Dooley <conor.dooley@microchip.com>
Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	songshuaishuai@tinylab.org
Subject: Re: [PATCH v3] riscv: move memblock_allow_resize() after linear mapping is ready
Date: Wed, 21 Jun 2023 09:26:52 +0800	[thread overview]
Message-ID: <D2FEDA5AF06E62A9+9447e466-27d2-c815-8530-6e487ddc7275@tinylab.org> (raw)
In-Reply-To: <tencent_FBB94CE615C5CCE7701CD39C15CCE0EE9706@qq.com>



在 2023/6/14 21:19, Woody Zhang 写道:
> The initial memblock metadata is accessed from kernel image mapping. The
> regions arrays need to "reallocated" from memblock and accessed through
> linear mapping to cover more memblock regions. So the resizing should
> not be allowed until linear mapping is ready. Note that there are
> memblock allocations when building linear mapping.
> 
> This patch is similar to 24cc61d8cb5a ("arm64: memblock: don't permit
> memblock resizing until linear mapping is up").
> 
> In following log, many memblock regions are reserved before
> create_linear_mapping_page_table(). And then it triggered reallocation
> of memblock.reserved.regions and memcpy the old array in kernel image
> mapping to the new array in linear mapping which caused a page fault.
> 
> [    0.000000] memblock_reserve: [0x00000000bf01f000-0x00000000bf01ffff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf021000-0x00000000bf021fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf023000-0x00000000bf023fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf025000-0x00000000bf025fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf027000-0x00000000bf027fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf029000-0x00000000bf029fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf02b000-0x00000000bf02bfff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf02d000-0x00000000bf02dfff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf02f000-0x00000000bf02ffff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] memblock_reserve: [0x00000000bf030000-0x00000000bf030fff] early_init_fdt_scan_reserved_mem+0x28c/0x2c6
> [    0.000000] OF: reserved mem: 0x0000000080000000..0x000000008007ffff (512 KiB) map non-reusable mmode_resv0@80000000
> [    0.000000] memblock_reserve: [0x00000000bf000000-0x00000000bf001fed] paging_init+0x19a/0x5ae
> [    0.000000] memblock_phys_alloc_range: 4096 bytes align=0x1000 from=0x0000000000000000 max_addr=0x0000000000000000 alloc_pmd_fixmap+0x14/0x1c
> [    0.000000] memblock_reserve: [0x000000017ffff000-0x000000017fffffff] memblock_alloc_range_nid+0xb8/0x128
> [    0.000000] memblock: reserved is doubled to 256 at [0x000000017fffd000-0x000000017fffe7ff]
> [    0.000000] Unable to handle kernel paging request at virtual address ff600000ffffd000
> [    0.000000] Oops [#1]
> [    0.000000] Modules linked in:
> [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 6.4.0-rc1-00011-g99a670b2069c #66
> [    0.000000] Hardware name: riscv-virtio,qemu (DT)
> [    0.000000] epc : __memcpy+0x60/0xf8
> [    0.000000]  ra : memblock_double_array+0x192/0x248
> [    0.000000] epc : ffffffff8081d214 ra : ffffffff80a3dfc0 sp : ffffffff81403bd0
> [    0.000000]  gp : ffffffff814fbb38 tp : ffffffff8140dac0 t0 : 0000000001600000
> [    0.000000]  t1 : 0000000000000000 t2 : 000000008f001000 s0 : ffffffff81403c60
> [    0.000000]  s1 : ffffffff80c0bc98 a0 : ff600000ffffd000 a1 : ffffffff80c0bcd8
> [    0.000000]  a2 : 0000000000000c00 a3 : ffffffff80c0c8d8 a4 : 0000000080000000
> [    0.000000]  a5 : 0000000000080000 a6 : 0000000000000000 a7 : 0000000080200000
> [    0.000000]  s2 : ff600000ffffd000 s3 : 0000000000002000 s4 : 0000000000000c00
> [    0.000000]  s5 : ffffffff80c0bc60 s6 : ffffffff80c0bcc8 s7 : 0000000000000000
> [    0.000000]  s8 : ffffffff814fd0a8 s9 : 000000017fffe7ff s10: 0000000000000000
> [    0.000000]  s11: 0000000000001000 t3 : 0000000000001000 t4 : 0000000000000000
> [    0.000000]  t5 : 000000008f003000 t6 : ff600000ffffd000
> [    0.000000] status: 0000000200000100 badaddr: ff600000ffffd000 cause: 000000000000000f
> [    0.000000] [<ffffffff8081d214>] __memcpy+0x60/0xf8
> [    0.000000] [<ffffffff80a3e1a2>] memblock_add_range.isra.14+0x12c/0x162
> [    0.000000] [<ffffffff80a3e36a>] memblock_reserve+0x6e/0x8c
> [    0.000000] [<ffffffff80a123fc>] memblock_alloc_range_nid+0xb8/0x128
> [    0.000000] [<ffffffff80a1256a>] memblock_phys_alloc_range+0x5e/0x6a
> [    0.000000] [<ffffffff80a04732>] alloc_pmd_fixmap+0x14/0x1c
> [    0.000000] [<ffffffff80a0475a>] alloc_p4d_fixmap+0xc/0x14
> [    0.000000] [<ffffffff80a04a36>] create_pgd_mapping+0x98/0x17c
> [    0.000000] [<ffffffff80a04e9e>] create_linear_mapping_range.constprop.10+0xe4/0x112
> [    0.000000] [<ffffffff80a05bb8>] paging_init+0x3ec/0x5ae
> [    0.000000] [<ffffffff80a03354>] setup_arch+0xb2/0x576
> [    0.000000] [<ffffffff80a00726>] start_kernel+0x72/0x57e
> [    0.000000] Code: b303 0285 b383 0305 be03 0385 be83 0405 bf03 0485 (b023) 00ef
> [    0.000000] ---[ end trace 0000000000000000 ]---
> [    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
> [    0.000000] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
> 
> Fixes: 671f9a3e2e24 ("RISC-V: Setup initial page tables in two stages")
> Signed-off-by: Woody Zhang <woodylab@foxmail.com>
> ---
> Changes in v3:
>   - Add panic log for the bug case.
>   - Move memblock_allow_resize to paging_init per suggestions from Alex and
>     Song Shuai.
> 
> Changes in v2:
>   - Refine commit log
> ---
>   arch/riscv/mm/init.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 4fa420faa780..1306149aad57 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -267,7 +267,6 @@ static void __init setup_bootmem(void)
>   	dma_contiguous_reserve(dma32_phys_limit);
>   	if (IS_ENABLED(CONFIG_64BIT))
>   		hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
> -	memblock_allow_resize();
>   }
>   
>   #ifdef CONFIG_MMU
> @@ -1370,6 +1369,9 @@ void __init paging_init(void)
>   {
>   	setup_bootmem();
>   	setup_vm_final();
> +
> +	/* Depend on that Linear Mapping is ready */
> +	memblock_allow_resize();
>   }
>   
>   void __init misc_mem_init(void)

Tested-by: Song Shuai <songshuaishuai@tinylab.org>

-- 
Thanks
Song Shuai


  reply	other threads:[~2023-06-21  1:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-14 13:19 [PATCH v3] riscv: move memblock_allow_resize() after linear mapping is ready Woody Zhang
2023-06-21  1:26 ` Song Shuai [this message]
2023-07-05 23:38 ` Palmer Dabbelt
2023-07-05 23:50 ` patchwork-bot+linux-riscv

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D2FEDA5AF06E62A9+9447e466-27d2-c815-8530-6e487ddc7275@tinylab.org \
    --to=songshuaishuai@tinylab.org \
    --cc=alexghiti@rivosinc.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=conor.dooley@microchip.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=woodylab@foxmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).