Files
build/patch/kernel/archive/meson64-6.2/general-of-fdt-Scan-memreserve-last.patch
Ricardo Pardini 09e82fe25e meson64-edge (6.2.y): rebase & update .config to 6.2.16 (EOL); pick chewitt (add t95z+fixes); rework SPI-NOR dtbs
- `meson64`-`edge` (6.2.y): drop old/unused/pre-armbian-next builddeb patch that was leftover
- `meson64`-`edge` (6.2.y): pick & squash from chewitt's tree; new t95z board and its tm1628 driver, fixes for odroidc2, vim3, gxl/gxm SDIO
- `meson64`-`edge` (6.2.y): reword the `-spi` extra DTBs for the N2(+) into more generic for g12; add VIM3/VIM3L which also have same SPI NOR scheme
- `meson64`-`edge` (6.2.y): update .config to 6.2.16; enable `CONFIG_TM1628`
- `meson64`-`edge` (6.2.y): rebase to 6.2.16 after picking chewitt
2023-05-21 14:01:11 +02:00

49 lines
1.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lucas Tanure <tanure@linux.com>
Date: Wed, 12 Apr 2023 18:46:20 -0400
Subject: FROMLIST(v4): 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.
Signed-off-by: Lucas Tanure <tanure@linux.com>
---
drivers/of/fdt.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 81508e8b34d2..0252a7189d99 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -626,6 +626,9 @@ void __init early_init_fdt_scan_reserved_mem(void)
if (!initial_boot_params)
return;
+ fdt_scan_reserved_mem();
+ fdt_reserve_elfcorehdr();
+
/* Process header /memreserve/ fields */
for (n = 0; ; n++) {
fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
@@ -634,8 +637,6 @@ void __init early_init_fdt_scan_reserved_mem(void)
memblock_reserve(base, size);
}
- fdt_scan_reserved_mem();
- fdt_reserve_elfcorehdr();
fdt_init_reserved_mem();
}
--
Armbian