diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2011-12-06 14:23:35 +0000 | 
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2011-12-06 14:23:35 +0000 | 
| commit | 3642a0a2c7d2d1949988d0fd004a8039c1f3d02f (patch) | |
| tree | e687c88b1b66ad51a6a6c529f7f328f2d3b625fa /arch/arm/kernel/machine_kexec.c | |
| parent | 58a273745fbb2fbd01d26e7a60f0acc8c1d99469 (diff) | |
| parent | b07fed455c883f07f8e847f5b0d79975b4dc8e7a (diff) | |
| download | olio-linux-3.10-3642a0a2c7d2d1949988d0fd004a8039c1f3d02f.tar.xz olio-linux-3.10-3642a0a2c7d2d1949988d0fd004a8039c1f3d02f.zip  | |
Merge branch 'mxs/saif' into next/drivers
Conflicts:
	drivers/net/ethernet/cadence/Kconfig
Diffstat (limited to 'arch/arm/kernel/machine_kexec.c')
| -rw-r--r-- | arch/arm/kernel/machine_kexec.c | 35 | 
1 files changed, 17 insertions, 18 deletions
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index c1b4463dcc8..e59bbd496c3 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c @@ -32,24 +32,6 @@ static atomic_t waiting_for_crash_ipi;  int machine_kexec_prepare(struct kimage *image)  { -	unsigned long page_list; -	void *reboot_code_buffer; -	page_list = image->head & PAGE_MASK; - -	reboot_code_buffer = page_address(image->control_code_page); - -	/* Prepare parameters for reboot_code_buffer*/ -	kexec_start_address = image->start; -	kexec_indirection_page = page_list; -	kexec_mach_type = machine_arch_type; -	kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; - -	/* copy our kernel relocation code to the control code page */ -	memcpy(reboot_code_buffer, -	       relocate_new_kernel, relocate_new_kernel_size); - -	flush_icache_range((unsigned long) reboot_code_buffer, -			   (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);  	return 0;  } @@ -100,14 +82,31 @@ void (*kexec_reinit)(void);  void machine_kexec(struct kimage *image)  { +	unsigned long page_list;  	unsigned long reboot_code_buffer_phys;  	void *reboot_code_buffer; + +	page_list = image->head & PAGE_MASK; +  	/* we need both effective and real address here */  	reboot_code_buffer_phys =  	    page_to_pfn(image->control_code_page) << PAGE_SHIFT;  	reboot_code_buffer = page_address(image->control_code_page); +	/* Prepare parameters for reboot_code_buffer*/ +	kexec_start_address = image->start; +	kexec_indirection_page = page_list; +	kexec_mach_type = machine_arch_type; +	kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; + +	/* copy our kernel relocation code to the control code page */ +	memcpy(reboot_code_buffer, +	       relocate_new_kernel, relocate_new_kernel_size); + + +	flush_icache_range((unsigned long) reboot_code_buffer, +			   (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);  	printk(KERN_INFO "Bye!\n");  	if (kexec_reinit)  |