diff options
Diffstat (limited to 'kernel/kexec.c')
-rw-r--r-- | kernel/kexec.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index 7b0886786701..4e2e472f6aeb 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <asm/page.h> | 37 | #include <asm/page.h> |
38 | #include <asm/uaccess.h> | 38 | #include <asm/uaccess.h> |
39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
40 | #include <asm/system.h> | ||
41 | #include <asm/sections.h> | 40 | #include <asm/sections.h> |
42 | 41 | ||
43 | /* Per cpu memory for storing cpu states in case of system crash. */ | 42 | /* Per cpu memory for storing cpu states in case of system crash. */ |
@@ -1359,6 +1358,10 @@ static int __init parse_crashkernel_simple(char *cmdline, | |||
1359 | 1358 | ||
1360 | if (*cur == '@') | 1359 | if (*cur == '@') |
1361 | *crash_base = memparse(cur+1, &cur); | 1360 | *crash_base = memparse(cur+1, &cur); |
1361 | else if (*cur != ' ' && *cur != '\0') { | ||
1362 | pr_warning("crashkernel: unrecognized char\n"); | ||
1363 | return -EINVAL; | ||
1364 | } | ||
1362 | 1365 | ||
1363 | return 0; | 1366 | return 0; |
1364 | } | 1367 | } |
@@ -1462,7 +1465,9 @@ static int __init crash_save_vmcoreinfo_init(void) | |||
1462 | 1465 | ||
1463 | VMCOREINFO_SYMBOL(init_uts_ns); | 1466 | VMCOREINFO_SYMBOL(init_uts_ns); |
1464 | VMCOREINFO_SYMBOL(node_online_map); | 1467 | VMCOREINFO_SYMBOL(node_online_map); |
1468 | #ifdef CONFIG_MMU | ||
1465 | VMCOREINFO_SYMBOL(swapper_pg_dir); | 1469 | VMCOREINFO_SYMBOL(swapper_pg_dir); |
1470 | #endif | ||
1466 | VMCOREINFO_SYMBOL(_stext); | 1471 | VMCOREINFO_SYMBOL(_stext); |
1467 | VMCOREINFO_SYMBOL(vmlist); | 1472 | VMCOREINFO_SYMBOL(vmlist); |
1468 | 1473 | ||
@@ -1546,13 +1551,13 @@ int kernel_kexec(void) | |||
1546 | if (error) | 1551 | if (error) |
1547 | goto Resume_console; | 1552 | goto Resume_console; |
1548 | /* At this point, dpm_suspend_start() has been called, | 1553 | /* At this point, dpm_suspend_start() has been called, |
1549 | * but *not* dpm_suspend_noirq(). We *must* call | 1554 | * but *not* dpm_suspend_end(). We *must* call |
1550 | * dpm_suspend_noirq() now. Otherwise, drivers for | 1555 | * dpm_suspend_end() now. Otherwise, drivers for |
1551 | * some devices (e.g. interrupt controllers) become | 1556 | * some devices (e.g. interrupt controllers) become |
1552 | * desynchronized with the actual state of the | 1557 | * desynchronized with the actual state of the |
1553 | * hardware at resume time, and evil weirdness ensues. | 1558 | * hardware at resume time, and evil weirdness ensues. |
1554 | */ | 1559 | */ |
1555 | error = dpm_suspend_noirq(PMSG_FREEZE); | 1560 | error = dpm_suspend_end(PMSG_FREEZE); |
1556 | if (error) | 1561 | if (error) |
1557 | goto Resume_devices; | 1562 | goto Resume_devices; |
1558 | error = disable_nonboot_cpus(); | 1563 | error = disable_nonboot_cpus(); |
@@ -1579,7 +1584,7 @@ int kernel_kexec(void) | |||
1579 | local_irq_enable(); | 1584 | local_irq_enable(); |
1580 | Enable_cpus: | 1585 | Enable_cpus: |
1581 | enable_nonboot_cpus(); | 1586 | enable_nonboot_cpus(); |
1582 | dpm_resume_noirq(PMSG_RESTORE); | 1587 | dpm_resume_start(PMSG_RESTORE); |
1583 | Resume_devices: | 1588 | Resume_devices: |
1584 | dpm_resume_end(PMSG_RESTORE); | 1589 | dpm_resume_end(PMSG_RESTORE); |
1585 | Resume_console: | 1590 | Resume_console: |