Thread (7 messages) 7 messages, 4 authors, 2020-11-20

Re: [PATCH] arm64: Force NO_BLOCK_MAPPINGS if crashkernel reservation is required

From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2020-11-20 09:24:00

On Fri, Nov 20, 2020 at 09:25:22AM +0530, Anshuman Khandual wrote:
On 11/19/20 11:25 PM, Catalin Marinas wrote:
quoted
mem_init() currently relies on knowing the boundaries of the crashkernel
reservation to map such region with page granularity for later
unmapping via set_memory_valid(..., 0). If the crashkernel reservation
is deferred, such boundaries are not known when the linear mapping is
created. Simply parse the command line for "crashkernel" and, if found,
create the linear map with NO_BLOCK_MAPPINGS.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Nicolas Saenz Julienne <redacted>
---

Following the online (and offline) discussion with James and Nicolas,
this aims to avoid issues with moving the reserve_crashkernel() call to
after the memory map has been created (the ZONE_DMA patches).

https://lore.kernel.org/r/e60d643e-4879-3fc3-737d-2c145332a6d7@arm.com (local)

 arch/arm64/mm/mmu.c | 37 ++++++++++++++++---------------------
 1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index d7fe72ee678a..dd214157a026 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -469,6 +469,21 @@ void __init mark_linear_text_alias_ro(void)
 			    PAGE_KERNEL_RO);
 }
 
+static bool crash_mem_map __initdata;
+
+static int __init enable_crash_mem_map(char *arg)
+{
+	/*
+	 * Proper parameter parsing is done by reserve_crashkernel(). We only
+	 * need to know if the linear map has to avoid block mappings so that
+	 * the crashkernel reservations can be unmapped later.
+	 */
+	crash_mem_map = true;
+
+	return 0;
+}
+early_param("crashkernel", enable_crash_mem_map);
Should not the crash kernel cmdline parameter gets parsed enough, just to
ensure it is atleast a valid one ? Otherwise an invalid cmdline request
can prevent the block mapping. In that case, the kernel will neither have
a crash kernel nor the block mapping.
Does it actually matter? If people pass random strings on the command
line, they should expect some side-effects. That's about the intention
to have a crashkernel. We can't fully validate the crashkernel parameter
until we know the zones layout.

Also note that with defconfig, we don't get block mappings anyway
(rodata_full).

-- 
Catalin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help