diff options
Diffstat (limited to 'kexec/arch')
-rw-r--r-- | kexec/arch/arm/kexec-zImage-arm.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kexec/arch/arm/kexec-zImage-arm.c b/kexec/arch/arm/kexec-zImage-arm.c index 925a9be..f4c23bf 100644 --- a/kexec/arch/arm/kexec-zImage-arm.c +++ b/kexec/arch/arm/kexec-zImage-arm.c @@ -382,6 +382,7 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, unsigned int atag_offset = 0x1000; /* 4k offset from memory start */ unsigned int extra_size = 0x8000; /* TEXT_OFFSET */ const struct zimage_tag *tag; + size_t kernel_buf_size; size_t kernel_mem_size; const char *command_line; char *modified_cmdline = NULL; @@ -538,6 +539,15 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, } /* + * Save the length of the compressed kernel image w/o the appended DTB. + * This will be required later on when the kernel image contained + * in the zImage will be loaded into a kernel memory segment. + * And we want to load ONLY the compressed kernel image from the zImage + * and discard the appended DTB. + */ + kernel_buf_size = len; + + /* * Always extend the zImage by four bytes to ensure that an appended * DTB image always sees an initialised value after _edata. */ @@ -759,7 +769,7 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, add_segment(info, dtb_buf, dtb_length, dtb_offset, dtb_length); } - add_segment(info, buf, len, kernel_base, kernel_mem_size); + add_segment(info, buf, kernel_buf_size, kernel_base, kernel_mem_size); info->entry = (void*)kernel_base; |