diff options
| author | Takashi Iwai <tiwai@suse.de> | 2014-11-27 12:40:51 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2014-11-27 12:40:51 +0100 |
| commit | acf403ecc4155153e5e2c1640be90fc166e56ba7 (patch) | |
| tree | e9655b84776cec00a4da077f5dd1e336dfd9c7c0 /arch/x86/boot/compressed/misc.c | |
| parent | 69eba10e606a80665f8573221fec589430d9d1cb (diff) | |
| parent | b61f90eac1ff9d1b30497e611aba4651d4066706 (diff) | |
Merge branch 'topic/usb-resume' into for-next
Merge the proper mixer resume support for quirk codes.
Diffstat (limited to 'arch/x86/boot/compressed/misc.c')
| -rw-r--r-- | arch/x86/boot/compressed/misc.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 57ab74df7eea..30dd59a9f0b4 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c @@ -358,7 +358,8 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap, unsigned char *input_data, unsigned long input_len, unsigned char *output, - unsigned long output_len) + unsigned long output_len, + unsigned long run_size) { real_mode = rmode; @@ -381,8 +382,14 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap, free_mem_ptr = heap; /* Heap */ free_mem_end_ptr = heap + BOOT_HEAP_SIZE; - output = choose_kernel_location(input_data, input_len, - output, output_len); + /* + * The memory hole needed for the kernel is the larger of either + * the entire decompressed kernel plus relocation table, or the + * entire decompressed kernel plus .bss and .brk sections. + */ + output = choose_kernel_location(input_data, input_len, output, + output_len > run_size ? output_len + : run_size); /* Validate memory location choices. */ if ((unsigned long)output & (MIN_KERNEL_ALIGN - 1)) |
