Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edd8ce67 authored by Bernhard Walle's avatar Bernhard Walle Committed by Linus Torvalds
Browse files

Use extended crashkernel command line on ppc64



This patch adapts the ppc64 code to use the generic parse_crashkernel()
function introduced in the generic patch of that series.

Signed-off-by: default avatarBernhard Walle <bwalle@suse.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Vivek Goyal <vgoyal@in.ibm.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent cb380853
Loading
Loading
Loading
Loading
+27 −27
Original line number Diff line number Diff line
@@ -61,45 +61,39 @@ NORET_TYPE void machine_kexec(struct kimage *image)
	for(;;);
}

static int __init early_parse_crashk(char *p)
{
	unsigned long size;

	if (!p)
		return 1;

	size = memparse(p, &p);

	if (*p == '@')
		crashk_res.start = memparse(p + 1, &p);
	else
		crashk_res.start = KDUMP_KERNELBASE;

	crashk_res.end = crashk_res.start + size - 1;

	return 0;
}
early_param("crashkernel", early_parse_crashk);

void __init reserve_crashkernel(void)
{
	unsigned long size;
	unsigned long long crash_size, crash_base;
	int ret;

	/* this is necessary because of lmb_phys_mem_size() */
	lmb_analyze();

	/* use common parsing */
	ret = parse_crashkernel(boot_command_line, lmb_phys_mem_size(),
			&crash_size, &crash_base);
	if (ret == 0 && crash_size > 0) {
		if (crash_base == 0)
			crash_base = KDUMP_KERNELBASE;
		crashk_res.start = crash_base;
	} else {
		/* handle the device tree */
		crash_size = crashk_res.end - crashk_res.start + 1;
	}

	if (crashk_res.start == 0)
	if (crash_size == 0)
		return;

	/* We might have got these values via the command line or the
	 * device tree, either way sanitise them now. */

	size = crashk_res.end - crashk_res.start + 1;

	if (crashk_res.start != KDUMP_KERNELBASE)
		printk("Crash kernel location must be 0x%x\n",
				KDUMP_KERNELBASE);

	crashk_res.start = KDUMP_KERNELBASE;
	size = PAGE_ALIGN(size);
	crashk_res.end = crashk_res.start + size - 1;
	crash_size = PAGE_ALIGN(crash_size);
	crashk_res.end = crashk_res.start + crash_size - 1;

	/* Crash kernel trumps memory limit */
	if (memory_limit && memory_limit <= crashk_res.end) {
@@ -108,7 +102,13 @@ void __init reserve_crashkernel(void)
				memory_limit);
	}

	lmb_reserve(crashk_res.start, size);
	printk(KERN_INFO "Reserving %ldMB of memory at %ldMB "
			"for crashkernel (System RAM: %ldMB)\n",
			(unsigned long)(crash_size >> 20),
			(unsigned long)(crashk_res.start >> 20),
			(unsigned long)(lmb_phys_mem_size() >> 20));

	lmb_reserve(crashk_res.start, crash_size);
}

int overlaps_crashkernel(unsigned long start, unsigned long size)