devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Russell King <rmk+kernel@arm.linux.org.uk>
To: linux-arm-kernel@lists.infradead.org
Cc: devicetree@vger.kernel.org,
	Eric Biederman <ebiederm@xmission.com>,
	Fenghua Yu <fenghua.yu@intel.com>,
	Haren Myneni <hbabu@us.ibm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	Jonathan Corbet <corbet@lwn.net>,
	kexec@lists.infradead.org, Kumar Gala <galak@codeaurora.org>,
	linux-doc@vger.kernel.org, linux-ia64@vger.kernel.org,
	Mark Rutland <mark.rutland@arm.com>,
	Pawel Moll <pawel.moll@arm.com>, Rob Herring <robh+dt@kernel.org>,
	Santosh Shilimkar <ssantosh@kernel.org>,
	Tony Luck <tony.luck@intel.com>, Vivek Goyal <vgoyal@redhat.com>
Subject: [PATCH 01/12] ARM: kexec: fix crashkernel= handling
Date: Thu, 28 Apr 2016 10:27:48 +0100	[thread overview]
Message-ID: <E1aviEe-0000if-VZ@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20160428092644.GX19428@n2100.arm.linux.org.uk>

When the kernel crashkernel parameter is specified with just a size, we
are supposed to allocate a region from RAM to store the crashkernel.
However, ARM merely reserves physical address zero with no checking that
there is even RAM there.

Fix this by lifting similar code from x86, importing it to ARM with the
ARM specific parameters added.  In the absence of any platform specific
information, we allocate the crashkernel region from the first 512MB of
physical memory.

Update the kdump documentation to reflect this change.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 Documentation/kdump/kdump.txt | 13 +++----------
 arch/arm/kernel/setup.c       | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/Documentation/kdump/kdump.txt b/Documentation/kdump/kdump.txt
index bc4bd5a44b88..88ff63d5fde3 100644
--- a/Documentation/kdump/kdump.txt
+++ b/Documentation/kdump/kdump.txt
@@ -263,12 +263,6 @@ been removed from the machine.
     crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset]
     range=start-[end]
 
-Please note, on arm, the offset is required.
-    crashkernel=<range1>:<size1>[,<range2>:<size2>,...]@offset
-    range=start-[end]
-
-    'start' is inclusive and 'end' is exclusive.
-
 For example:
 
     crashkernel=512M-2G:64M,2G-:128M
@@ -307,10 +301,9 @@ Boot into System Kernel
    on the memory consumption of the kdump system. In general this is not
    dependent on the memory size of the production system.
 
-   On arm, use "crashkernel=Y@X". Note that the start address of the kernel
-   will be aligned to 128MiB (0x08000000), so if the start address is not then
-   any space below the alignment point may be overwritten by the dump-capture kernel,
-   which means it is possible that the vmcore is not that precise as expected.
+   On arm, the use of "crashkernel=Y@X" is no longer necessary; the
+   kernel will automatically locate the crash kernel image within the
+   first 512MB of RAM if X is not given.
 
 
 Load the Dump-capture Kernel
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 139791ed473d..77b54c461c52 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -938,6 +938,13 @@ static int __init init_machine_late(void)
 late_initcall(init_machine_late);
 
 #ifdef CONFIG_KEXEC
+/*
+ * The crash region must be aligned to 128MB to avoid
+ * zImage relocating below the reserved region.
+ */
+#define CRASH_ALIGN	(128 << 20)
+#define CRASH_ADDR_MAX	(PHYS_OFFSET + (512 << 20))
+
 static inline unsigned long long get_total_mem(void)
 {
 	unsigned long total;
@@ -965,6 +972,28 @@ static void __init reserve_crashkernel(void)
 	if (ret)
 		return;
 
+	if (crash_base <= 0) {
+		unsigned long long crash_max = CRASH_ADDR_MAX;
+		if (crash_max > (u32)~0)
+			crash_max = (u32)~0;
+		crash_base = memblock_find_in_range(CRASH_ALIGN, crash_max,
+						    crash_size, CRASH_ALIGN);
+		if (!crash_base) {
+			pr_err("crashkernel reservation failed - No suitable area found.\n");
+			return;
+		}
+	} else {
+		unsigned long long start;
+
+		start = memblock_find_in_range(crash_base,
+					       crash_base + crash_size,
+					       crash_size, SECTION_SIZE);
+		if (start != crash_base) {
+			pr_err("crashkernel reservation failed - memory is in use.\n");
+			return;
+		}
+	}
+
 	ret = memblock_reserve(crash_base, crash_size);
 	if (ret < 0) {
 		pr_warn("crashkernel reservation failed - memory is in use (0x%lx)\n",
-- 
2.1.0


  reply	other threads:[~2016-04-28  9:27 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-28  9:26 [PATCH 00/12] Fixing TI Keystone2 kexec Russell King - ARM Linux
2016-04-28  9:27 ` Russell King [this message]
     [not found]   ` <E1aviEe-0000if-VZ-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
2016-04-29 14:17     ` [PATCH 01/12] ARM: kexec: fix crashkernel= handling Pratyush Anand
2016-04-28  9:27 ` [PATCH 02/12] ARM: provide improved virt_to_idmap() functionality Russell King
2016-04-28  9:27 ` [PATCH 03/12] ARM: kexec: remove 512MB restriction on kexec crashdump Russell King
2016-04-29 14:19   ` Pratyush Anand
     [not found]     ` <CAHB_GuqOvRof94QdHztPy2B2kKuyKzQ-9uxXHY_g+i5WxsexZg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-29 18:10       ` Russell King - ARM Linux
2016-04-30  3:36         ` Pratyush Anand
2016-04-30  8:25           ` Russell King - ARM Linux
2016-04-28  9:28 ` [PATCH 04/12] ARM: provide arm_has_idmap_alias() helper Russell King
2016-04-29 14:21   ` Pratyush Anand
2016-04-28  9:28 ` [PATCH 05/12] ARM: kdump: advertise boot aliased crash kernel resource Russell King
2016-04-28  9:28 ` [PATCH 06/12] ARM: kexec: advertise location of bootable RAM Russell King
2016-04-29 14:56   ` Pratyush Anand
2016-04-29 18:00     ` Russell King - ARM Linux
2016-04-30  3:27       ` Pratyush Anand
2016-04-30  8:20         ` Russell King - ARM Linux
2016-05-02  7:34           ` Pratyush Anand
2016-05-02 10:10             ` Russell King - ARM Linux
2016-05-02 10:48               ` Pratyush Anand
     [not found]     ` <CAHB_GurHc1aVfzJATpNW5yf5s5KkF=t5s09FbWq3+9+ZX39KUg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-05-03 10:29       ` Russell King - ARM Linux
2016-04-28  9:28 ` [PATCH 07/12] ARM: keystone: dts: add psci command definition Russell King
2016-04-28  9:28 ` [PATCH 08/12] kexec: don't invoke OOM-killer for control page allocation Russell King
2016-04-29 14:57   ` Pratyush Anand
2016-04-28  9:28 ` [PATCH 09/12] kexec: ensure user memory sizes do not wrap Russell King
     [not found]   ` <E1aviFK-0000jY-1S-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
2016-04-29 14:57     ` Pratyush Anand
2016-04-28  9:28 ` [PATCH 10/12] kexec: arrange for paddr_vmcoreinfo_note() to return phys_addr_t Russell King
2016-04-29 15:06   ` Pratyush Anand
2016-04-29 15:16     ` Mark Rutland
2016-04-29 15:47       ` Pratyush Anand
2016-05-03  4:24         ` Baoquan He
2016-05-03  5:53           ` Pratyush Anand
2016-05-03  9:01             ` Baoquan He
     [not found]           ` <20160503042441.GA2518-ejN7fcUYdH/by3iVrkZq2A@public.gmane.org>
2016-05-03 10:12             ` Russell King - ARM Linux
2016-05-03 12:56               ` Baoquan He
2016-04-29 18:06     ` Russell King - ARM Linux
2016-04-30  3:30       ` Pratyush Anand
2016-04-28  9:28 ` [PATCH 11/12] kexec: allow architectures to override boot mapping Russell King
2016-04-29 15:14   ` Pratyush Anand
2016-04-29 18:08     ` Russell King - ARM Linux
2016-05-11 18:56   ` Russell King - ARM Linux
2016-05-12  6:26   ` Baoquan He
2016-05-12  8:22     ` Russell King - ARM Linux
2016-04-28  9:28 ` [PATCH 12/12] ARM: kexec: fix kexec for Keystone 2 Russell King
2016-04-28 23:04 ` [PATCH 00/12] Fixing TI Keystone2 kexec Simon Horman
2016-05-11  8:29 ` Dave Young
2016-05-11  8:52   ` Russell King - ARM Linux
2016-05-11  9:13     ` Dave Young
2016-05-11  9:32       ` Russell King - ARM Linux
     [not found]         ` <20160511093255.GO19428-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2016-05-11 10:31           ` Dave Young

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1aviEe-0000if-VZ@rmk-PC.arm.linux.org.uk \
    --to=rmk+kernel@arm.linux.org.uk \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=fenghua.yu@intel.com \
    --cc=galak@codeaurora.org \
    --cc=hbabu@us.ibm.com \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=ssantosh@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=vgoyal@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).