Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b034922 authored by Lei Wen's avatar Lei Wen Committed by Russell King
Browse files

ARM: 7098/1: kdump: copy kernel relocation code at the kexec prepare stage



This copy really don't need to do at the very second before the kernel
would crash.

Signed-off-by: default avatarLei Wen <leiwen@marvell.com>
Acked-by: default avatarSimon Horman <horms@verge.net.au>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 7f94e9cc
Loading
Loading
Loading
Loading
+18 −17
Original line number Diff line number Diff line
@@ -32,6 +32,24 @@ 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;
}

@@ -82,31 +100,14 @@ 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)