[PATCH] ARM: kexec: Use the right ISA for relocate_new_kernel

Will Deacon will.deacon at arm.com
Fri Nov 8 04:40:18 EST 2013


Hi Dave,

On Thu, Nov 07, 2013 at 08:51:36PM +0000, Dave Martin wrote:
> Copying a function with memcpy() and then trying to execute the
> result isn't trivially portable to Thumb.
> 
> This patch modifies the kexec soft restart code to copy its
> assembler trampoline relocate_new_kernel() using fncpy() instead,
> so that relocate_new_kernel can be in the same ISA as the rest of
> the kernel without problems.
> 
> Signed-off-by: Dave Martin <Dave.Martin at arm.com>

[...]

> @@ -168,16 +171,16 @@ void machine_kexec(struct kimage *image)
>  
>  
>  	/* copy our kernel relocation code to the control code page */
> -	memcpy(reboot_code_buffer,
> -	       relocate_new_kernel, relocate_new_kernel_size);
> +	reboot_entry = fncpy(reboot_code_buffer,
> +			     reboot_entry,
> +			     relocate_new_kernel_size);

My only slight gripe with this is that relocate_new_kernel_size also
includes a bunch of data following the function (which you have now delimited
with ENTRY/ENDPROC), so using fncpy for that feels a bit awkward.

Will



More information about the linux-arm-kernel mailing list