ARM: kdump: advertise boot aliased crash kernel resource
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 2 Aug 2016 21:05:48 +0000 (14:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Aug 2016 23:35:25 +0000 (19:35 -0400)
Advertise a resource which describes where the crash kernel is located
in the boot view of RAM.  This allows kexec-tools to have this vital
information.

Link: http://lkml.kernel.org/r/E1b8knz-0004H4-Bd@rmk-PC.armlinux.org.uk
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Baoquan He <bhe@redhat.com>
Cc: Keerthy <j-keerthy@ti.com>
Cc: Pratyush Anand <panand@redhat.com>
Cc: Vitaly Andrianov <vitalya@ti.com>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: Simon Horman <horms@verge.net.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/arm/kernel/setup.c

index da2f6c3..6c8c888 100644 (file)
@@ -1000,9 +1000,25 @@ static void __init reserve_crashkernel(void)
                (unsigned long)(crash_base >> 20),
                (unsigned long)(total_mem >> 20));
 
+       /* The crashk resource must always be located in normal mem */
        crashk_res.start = crash_base;
        crashk_res.end = crash_base + crash_size - 1;
        insert_resource(&iomem_resource, &crashk_res);
+
+       if (arm_has_idmap_alias()) {
+               /*
+                * If we have a special RAM alias for use at boot, we
+                * need to advertise to kexec tools where the alias is.
+                */
+               static struct resource crashk_boot_res = {
+                       .name = "Crash kernel (boot alias)",
+                       .flags = IORESOURCE_BUSY | IORESOURCE_MEM,
+               };
+
+               crashk_boot_res.start = phys_to_idmap(crash_base);
+               crashk_boot_res.end = crashk_boot_res.start + crash_size - 1;
+               insert_resource(&iomem_resource, &crashk_boot_res);
+       }
 }
 #else
 static inline void reserve_crashkernel(void) {}