]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/arm/kernel/machine_kexec.c
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
[karo-tx-linux.git] / arch / arm / kernel / machine_kexec.c
index 8cf0996aa1a8d795bfdb65add498aa1552829382..de2b085ad7535da771a173ed855bcfdee4926c99 100644 (file)
@@ -29,6 +29,7 @@ extern unsigned long kexec_boot_atags;
 
 static atomic_t waiting_for_crash_ipi;
 
+static unsigned long dt_mem;
 /*
  * Provide a dummy crash_notes definition while crash dump arrives to arm.
  * This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
@@ -64,7 +65,7 @@ int machine_kexec_prepare(struct kimage *image)
                        return err;
 
                if (be32_to_cpu(header) == OF_DT_HEADER)
-                       kexec_boot_atags = current_segment->mem;
+                       dt_mem = current_segment->mem;
        }
        return 0;
 }
@@ -126,12 +127,12 @@ void machine_crash_shutdown(struct pt_regs *regs)
                msecs--;
        }
        if (atomic_read(&waiting_for_crash_ipi) > 0)
-               printk(KERN_WARNING "Non-crashing CPUs did not react to IPI\n");
+               pr_warn("Non-crashing CPUs did not react to IPI\n");
 
        crash_save_cpu(regs, smp_processor_id());
        machine_kexec_mask_interrupts();
 
-       printk(KERN_INFO "Loading crashdump kernel...\n");
+       pr_info("Loading crashdump kernel...\n");
 }
 
 /*
@@ -163,12 +164,12 @@ void machine_kexec(struct kimage *image)
        reboot_code_buffer = page_address(image->control_code_page);
 
        /* Prepare parameters for reboot_code_buffer*/
+       set_kernel_text_rw();
        kexec_start_address = image->start;
        kexec_indirection_page = page_list;
        kexec_mach_type = machine_arch_type;
-       if (!kexec_boot_atags)
-               kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
-
+       kexec_boot_atags = dt_mem ?: image->start - KEXEC_ARM_ZIMAGE_OFFSET
+                                    + KEXEC_ARM_ATAGS_OFFSET;
 
        /* copy our kernel relocation code to the control code page */
        reboot_entry = fncpy(reboot_code_buffer,
@@ -177,7 +178,7 @@ void machine_kexec(struct kimage *image)
        reboot_entry_phys = (unsigned long)reboot_entry +
                (reboot_code_buffer_phys - (unsigned long)reboot_code_buffer);
 
-       printk(KERN_INFO "Bye!\n");
+       pr_info("Bye!\n");
 
        if (kexec_reinit)
                kexec_reinit();