[Devel] [PATCH RHEL9 COMMIT] kdump: port support for crashkernel=auto from RH8

Konstantin Khorenko khorenko at virtuozzo.com
Thu Oct 21 17:27:56 MSK 2021


The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh9-5.14.0-4.vz9.10.14
------>
commit 6b5c7507c3d365265d7b71a39007f7f37055fb49
Author: Nikita Yushchenko <nikita.yushchenko at virtuozzo.com>
Date:   Thu Oct 21 17:27:56 2021 +0300

    kdump: port support for crashkernel=auto from RH8
    
    khorenko@: values for x86_64 were taken from crashkernel.default, generated by
    redhat/generate_crashkernel_default.sh
    
    https://jira.sw.ru/browse/PSBM-134999
    Signed-off-by: Nikita Yushchenko <nikita.yushchenko at virtuozzo.com>
---
 kernel/crash_core.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index eb53f5ec62c9..d242c207862a 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -251,6 +251,30 @@ static int __init __parse_crashkernel(char *cmdline,
 	if (suffix)
 		return parse_crashkernel_suffix(ck_cmdline, crash_size,
 				suffix);
+
+	if (strncmp(ck_cmdline, "auto", 4) == 0) {
+#if defined(CONFIG_X86_64) || defined(CONFIG_S390)
+#ifndef CONFIG_KASAN
+		ck_cmdline = "1G-4G:192M,4G-64G:256M,64G-:512M";
+#else
+		ck_cmdline = "1G-1T:320M,1T-:512M";
+#endif
+#elif defined(CONFIG_ARM64)
+		ck_cmdline = "2G-:448M";
+#elif defined(CONFIG_PPC64)
+		char *fadump_cmdline;
+
+		fadump_cmdline = get_last_crashkernel(cmdline, "fadump=", NULL);
+		fadump_cmdline = fadump_cmdline ?
+				fadump_cmdline + strlen("fadump=") : NULL;
+		if (!fadump_cmdline || (strncmp(fadump_cmdline, "off", 3) == 0))
+			ck_cmdline = "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G";
+		else
+			ck_cmdline = "4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-:180G";
+#endif
+		pr_info("Using crashkernel=auto, the size chosen is a best effort estimation.\n");
+	}
+
 	/*
 	 * if the commandline contains a ':', then that's the extended
 	 * syntax -- if not, it must be the classic syntax


More information about the Devel mailing list