diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/head64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/setup_64.c | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index d6d54faa84df..993c76773256 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c | |||
@@ -146,6 +146,7 @@ void __init x86_64_start_kernel(char * real_mode_data) | |||
146 | 146 | ||
147 | reserve_early(__pa_symbol(&_text), __pa_symbol(&_end), "TEXT DATA BSS"); | 147 | reserve_early(__pa_symbol(&_text), __pa_symbol(&_end), "TEXT DATA BSS"); |
148 | 148 | ||
149 | #ifdef CONFIG_BLK_DEV_INITRD | ||
149 | /* Reserve INITRD */ | 150 | /* Reserve INITRD */ |
150 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { | 151 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { |
151 | unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; | 152 | unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; |
@@ -153,6 +154,7 @@ void __init x86_64_start_kernel(char * real_mode_data) | |||
153 | unsigned long ramdisk_end = ramdisk_image + ramdisk_size; | 154 | unsigned long ramdisk_end = ramdisk_image + ramdisk_size; |
154 | reserve_early(ramdisk_image, ramdisk_end, "RAMDISK"); | 155 | reserve_early(ramdisk_image, ramdisk_end, "RAMDISK"); |
155 | } | 156 | } |
157 | #endif | ||
156 | 158 | ||
157 | reserve_ebda_region(); | 159 | reserve_ebda_region(); |
158 | 160 | ||
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 674ef3510cdf..0aa291bff4e0 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c | |||
@@ -420,11 +420,14 @@ void __init setup_arch(char **cmdline_p) | |||
420 | unsigned long end_of_mem = end_pfn << PAGE_SHIFT; | 420 | unsigned long end_of_mem = end_pfn << PAGE_SHIFT; |
421 | 421 | ||
422 | if (ramdisk_end <= end_of_mem) { | 422 | if (ramdisk_end <= end_of_mem) { |
423 | reserve_bootmem_generic(ramdisk_image, ramdisk_size); | 423 | /* |
424 | * don't need to reserve again, already reserved early | ||
425 | * in x86_64_start_kernel, and early_res_to_bootmem | ||
426 | * convert that to reserved in bootmem | ||
427 | */ | ||
424 | initrd_start = ramdisk_image + PAGE_OFFSET; | 428 | initrd_start = ramdisk_image + PAGE_OFFSET; |
425 | initrd_end = initrd_start+ramdisk_size; | 429 | initrd_end = initrd_start+ramdisk_size; |
426 | } else { | 430 | } else { |
427 | /* Assumes everything on node 0 */ | ||
428 | free_bootmem(ramdisk_image, ramdisk_size); | 431 | free_bootmem(ramdisk_image, ramdisk_size); |
429 | printk(KERN_ERR "initrd extends beyond end of memory " | 432 | printk(KERN_ERR "initrd extends beyond end of memory " |
430 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", | 433 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", |