Commit b4132818 authored by Lucas Tanure's avatar Lucas Tanure Committed by Rob Herring

of: fdt: Scan /memreserve/ last

Change the scanning /memreserve/ and /reserved-memory node order to fix
Kernel panic on Khadas Vim3 Board.

If /memreserve/ goes first, the memory is reserved, but nomap can't be
applied to the region. So the memory won't be used by Linux, but it is
still present in the linear map as normal memory, which allows
speculation. Legitimate access to adjacent pages will cause the CPU
to end up prefetching into them leading to Kernel panic.

So /reserved-memory node should go first, as it has a more updated
description of the memory regions and can apply flags, like nomap.

Link: https://lore.kernel.org/all/CAJX_Q+1Tjc+-TjZ6JW9X0NxEdFe=82a9626yL63j7uVD4LpxEA@mail.gmail.com/Signed-off-by: default avatarLucas Tanure <tanure@linux.com>
Link: https://lore.kernel.org/r/20230424113846.46382-1-tanure@linux.comSigned-off-by: default avatarRob Herring <robh@kernel.org>
parent 6e0c2bf2
...@@ -635,6 +635,9 @@ void __init early_init_fdt_scan_reserved_mem(void) ...@@ -635,6 +635,9 @@ void __init early_init_fdt_scan_reserved_mem(void)
if (!initial_boot_params) if (!initial_boot_params)
return; return;
fdt_scan_reserved_mem();
fdt_reserve_elfcorehdr();
/* Process header /memreserve/ fields */ /* Process header /memreserve/ fields */
for (n = 0; ; n++) { for (n = 0; ; n++) {
fdt_get_mem_rsv(initial_boot_params, n, &base, &size); fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
...@@ -643,8 +646,6 @@ void __init early_init_fdt_scan_reserved_mem(void) ...@@ -643,8 +646,6 @@ void __init early_init_fdt_scan_reserved_mem(void)
memblock_reserve(base, size); memblock_reserve(base, size);
} }
fdt_scan_reserved_mem();
fdt_reserve_elfcorehdr();
fdt_init_reserved_mem(); fdt_init_reserved_mem();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment