Hi, the patch works! I am able to reboot my system using kexec when the kernel has this patch. I had to slightly modify the patch, so it will apply against linux-3.15.10: --- arch/x86/boot/compressed/misc.c.old 2014-08-22 14:52:20.792158801 +0200 +++ arch/x86/boot/compressed/misc.c 2014-08-22 14:58:21.250506919 +0200 @@ -230,8 +230,9 @@ asm("hlt"); } -#if CONFIG_X86_NEED_RELOCS -static void handle_relocations(void *output, unsigned long output_len) +#ifdef CONFIG_X86_NEED_RELOCS +static void handle_relocations(void *output_orig, void *output, + unsigned long output_len) { int *reloc; unsigned long delta, map, ptr; @@ -242,7 +243,7 @@ * Calculate the delta between where vmlinux was linked to load * and where it was actually loaded. */ - delta = min_addr - LOAD_PHYSICAL_ADDR; + delta = min_addr - (unsigned long)output_orig; if (!delta) { debug_putstr("No relocation needed... "); return; @@ -299,7 +300,8 @@ #endif } #else -static inline void handle_relocations(void *output, unsigned long output_len) +static inline void handle_relocations(void *output_orig, void *output, + unsigned long output_len) { } #endif @@ -360,6 +362,8 @@ unsigned char *output, unsigned long output_len) { + unsigned char *output_orig = output; + real_mode = rmode; sanitize_boot_params(real_mode); @@ -402,7 +406,7 @@ debug_putstr("\nDecompressing Linux... "); decompress(input_data, input_len, NULL, NULL, output, NULL, error); parse_elf(output); - handle_relocations(output, output_len); + handle_relocations(output_orig, output, output_len); debug_putstr("done.\nBooting the kernel.\n"); return output; } So now we have two "solutions": 1) Using kexec with "--entry-32bit" parameter 2) Use a patched kernel -Thomas