Merge tag 'acpi-5.20-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-2.6-microblaze.git] / kernel / crash_core.c
index 71122e0..07b26df 100644 (file)
@@ -9,12 +9,15 @@
 #include <linux/init.h>
 #include <linux/utsname.h>
 #include <linux/vmalloc.h>
+#include <linux/sizes.h>
 
 #include <asm/page.h>
 #include <asm/sections.h>
 
 #include <crypto/sha1.h>
 
+#include "kallsyms_internal.h"
+
 /* vmcoreinfo stuff */
 unsigned char *vmcoreinfo_data;
 size_t vmcoreinfo_size;
@@ -43,6 +46,15 @@ static int __init parse_crashkernel_mem(char *cmdline,
                                        unsigned long long *crash_base)
 {
        char *cur = cmdline, *tmp;
+       unsigned long long total_mem = system_ram;
+
+       /*
+        * Firmware sometimes reserves some memory regions for its own use,
+        * so the system memory size is less than the actual physical memory
+        * size. Work around this by rounding up the total size to 128M,
+        * which is enough for most test cases.
+        */
+       total_mem = roundup(total_mem, SZ_128M);
 
        /* for each entry of the comma-separated list */
        do {
@@ -87,13 +99,13 @@ static int __init parse_crashkernel_mem(char *cmdline,
                        return -EINVAL;
                }
                cur = tmp;
-               if (size >= system_ram) {
+               if (size >= total_mem) {
                        pr_warn("crashkernel: invalid size\n");
                        return -EINVAL;
                }
 
                /* match ? */
-               if (system_ram >= start && system_ram < end) {
+               if (total_mem >= start && total_mem < end) {
                        *crash_size = size;
                        break;
                }
@@ -480,6 +492,18 @@ static int __init crash_save_vmcoreinfo_init(void)
        VMCOREINFO_NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE);
 #endif
 
+#ifdef CONFIG_KALLSYMS
+       VMCOREINFO_SYMBOL(kallsyms_names);
+       VMCOREINFO_SYMBOL(kallsyms_token_table);
+       VMCOREINFO_SYMBOL(kallsyms_token_index);
+#ifdef CONFIG_KALLSYMS_BASE_RELATIVE
+       VMCOREINFO_SYMBOL(kallsyms_offsets);
+       VMCOREINFO_SYMBOL(kallsyms_relative_base);
+#else
+       VMCOREINFO_SYMBOL(kallsyms_addresses);
+#endif /* CONFIG_KALLSYMS_BASE_RELATIVE */
+#endif /* CONFIG_KALLSYMS */
+
        arch_crash_save_vmcoreinfo();
        update_vmcoreinfo_note();