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: |
