Commit 2dc80ab4 authored by Youling Tang's avatar Youling Tang Committed by Hongchen Zhang
Browse files

LoongArch: kdump: Add memory reservation for old kernel

LoongArch inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I736HO



--------------------------------

After moving the old kernel memory reservation to elfcorehdr operation, avoid
the elfcorehdr space from being destroyed.

Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
parent 9815551f
Loading
Loading
Loading
Loading
+35 −10
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ EXPORT_SYMBOL(cpu_data);
struct loongson_board_info b_info;
static const char dmi_empty_string[] = "        ";

static phys_addr_t crashmem_start, crashmem_size;

/*
 * Setup information
 *
@@ -206,6 +208,15 @@ static int __init early_parse_mem(char *p)
		return -EINVAL;
	}

	start = 0;
	size = memparse(p, &p);
	if (*p == '@')
		start = memparse(p + 1, &p);
	else {
		pr_err("Invalid format!\n");
		return -EINVAL;
	}

	/*
	 * If a user specifies memory size, we
	 * blow away any automatically generated
@@ -213,16 +224,14 @@ static int __init early_parse_mem(char *p)
	 */
	if (usermem == 0) {
		usermem = 1;
		if (!strstr(boot_command_line, "elfcorehdr")) {
			memblock_remove(memblock_start_of_DRAM(),
				memblock_end_of_DRAM() - memblock_start_of_DRAM());
		} else {
			crashmem_start = start;
			crashmem_size = size;
			return 0;
		}
	start = 0;
	size = memparse(p, &p);
	if (*p == '@')
		start = memparse(p + 1, &p);
	else {
		pr_err("Invalid format!\n");
		return -EINVAL;
	}

	if (!IS_ENABLED(CONFIG_NUMA))
@@ -369,10 +378,26 @@ static void __init bootcmdline_init(char **cmdline_p)
	*cmdline_p = boot_command_line;
}

/*
 * After the kdump operation is performed to enter the capture kernel, the
 * memory area used by the previous production kernel should be reserved to
 * avoid destroy to the captured data.
 */
static void reserve_oldmem_region(void)
{
#ifdef CONFIG_CRASH_DUMP
	if (!is_kdump_kernel())
		return;

	memblock_cap_memory_range(crashmem_start, crashmem_size);
#endif
}

void __init platform_init(void)
{
	arch_reserve_vmcore();
	arch_parse_crashkernel();
	reserve_oldmem_region();

#ifdef CONFIG_ACPI_TABLE_UPGRADE
	acpi_table_upgrade();