aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kexec.c')
-rw-r--r--kernel/kexec.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 3fb855ad6aa0..c7fd6692939d 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -934,9 +934,8 @@ struct kimage *kexec_crash_image;
934 934
935static DEFINE_MUTEX(kexec_mutex); 935static DEFINE_MUTEX(kexec_mutex);
936 936
937asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, 937SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
938 struct kexec_segment __user *segments, 938 struct kexec_segment __user *, segments, unsigned long, flags)
939 unsigned long flags)
940{ 939{
941 struct kimage **dest_image, *image; 940 struct kimage **dest_image, *image;
942 int result; 941 int result;
@@ -1131,7 +1130,7 @@ void crash_save_cpu(struct pt_regs *regs, int cpu)
1131 return; 1130 return;
1132 memset(&prstatus, 0, sizeof(prstatus)); 1131 memset(&prstatus, 0, sizeof(prstatus));
1133 prstatus.pr_pid = current->pid; 1132 prstatus.pr_pid = current->pid;
1134 elf_core_copy_regs(&prstatus.pr_reg, regs); 1133 elf_core_copy_kernel_regs(&prstatus.pr_reg, regs);
1135 buf = append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS, 1134 buf = append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS,
1136 &prstatus, sizeof(prstatus)); 1135 &prstatus, sizeof(prstatus));
1137 final_note(buf); 1136 final_note(buf);
@@ -1466,6 +1465,11 @@ int kernel_kexec(void)
1466 error = device_power_down(PMSG_FREEZE); 1465 error = device_power_down(PMSG_FREEZE);
1467 if (error) 1466 if (error)
1468 goto Enable_irqs; 1467 goto Enable_irqs;
1468
1469 /* Suspend system devices */
1470 error = sysdev_suspend(PMSG_FREEZE);
1471 if (error)
1472 goto Power_up_devices;
1469 } else 1473 } else
1470#endif 1474#endif
1471 { 1475 {
@@ -1478,6 +1482,8 @@ int kernel_kexec(void)
1478 1482
1479#ifdef CONFIG_KEXEC_JUMP 1483#ifdef CONFIG_KEXEC_JUMP
1480 if (kexec_image->preserve_context) { 1484 if (kexec_image->preserve_context) {
1485 sysdev_resume();
1486 Power_up_devices:
1481 device_power_up(PMSG_RESTORE); 1487 device_power_up(PMSG_RESTORE);
1482 Enable_irqs: 1488 Enable_irqs:
1483 local_irq_enable(); 1489 local_irq_enable();