|
@@ -295,6 +295,8 @@ static void __init reserve_brk(void)
|
|
_brk_start = 0;
|
|
_brk_start = 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+u64 relocated_ramdisk;
|
|
|
|
+
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
|
|
|
|
|
static u64 __init get_ramdisk_image(void)
|
|
static u64 __init get_ramdisk_image(void)
|
|
@@ -321,25 +323,24 @@ static void __init relocate_initrd(void)
|
|
u64 ramdisk_image = get_ramdisk_image();
|
|
u64 ramdisk_image = get_ramdisk_image();
|
|
u64 ramdisk_size = get_ramdisk_size();
|
|
u64 ramdisk_size = get_ramdisk_size();
|
|
u64 area_size = PAGE_ALIGN(ramdisk_size);
|
|
u64 area_size = PAGE_ALIGN(ramdisk_size);
|
|
- u64 ramdisk_here;
|
|
|
|
unsigned long slop, clen, mapaddr;
|
|
unsigned long slop, clen, mapaddr;
|
|
char *p, *q;
|
|
char *p, *q;
|
|
|
|
|
|
/* We need to move the initrd down into directly mapped mem */
|
|
/* We need to move the initrd down into directly mapped mem */
|
|
- ramdisk_here = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
|
|
|
|
- area_size, PAGE_SIZE);
|
|
|
|
|
|
+ relocated_ramdisk = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
|
|
|
|
+ area_size, PAGE_SIZE);
|
|
|
|
|
|
- if (!ramdisk_here)
|
|
|
|
|
|
+ if (!relocated_ramdisk)
|
|
panic("Cannot find place for new RAMDISK of size %lld\n",
|
|
panic("Cannot find place for new RAMDISK of size %lld\n",
|
|
- ramdisk_size);
|
|
|
|
|
|
+ ramdisk_size);
|
|
|
|
|
|
/* Note: this includes all the mem currently occupied by
|
|
/* Note: this includes all the mem currently occupied by
|
|
the initrd, we rely on that fact to keep the data intact. */
|
|
the initrd, we rely on that fact to keep the data intact. */
|
|
- memblock_reserve(ramdisk_here, area_size);
|
|
|
|
- initrd_start = ramdisk_here + PAGE_OFFSET;
|
|
|
|
|
|
+ memblock_reserve(relocated_ramdisk, area_size);
|
|
|
|
+ initrd_start = relocated_ramdisk + PAGE_OFFSET;
|
|
initrd_end = initrd_start + ramdisk_size;
|
|
initrd_end = initrd_start + ramdisk_size;
|
|
printk(KERN_INFO "Allocated new RAMDISK: [mem %#010llx-%#010llx]\n",
|
|
printk(KERN_INFO "Allocated new RAMDISK: [mem %#010llx-%#010llx]\n",
|
|
- ramdisk_here, ramdisk_here + ramdisk_size - 1);
|
|
|
|
|
|
+ relocated_ramdisk, relocated_ramdisk + ramdisk_size - 1);
|
|
|
|
|
|
q = (char *)initrd_start;
|
|
q = (char *)initrd_start;
|
|
|
|
|
|
@@ -363,7 +364,7 @@ static void __init relocate_initrd(void)
|
|
printk(KERN_INFO "Move RAMDISK from [mem %#010llx-%#010llx] to"
|
|
printk(KERN_INFO "Move RAMDISK from [mem %#010llx-%#010llx] to"
|
|
" [mem %#010llx-%#010llx]\n",
|
|
" [mem %#010llx-%#010llx]\n",
|
|
ramdisk_image, ramdisk_image + ramdisk_size - 1,
|
|
ramdisk_image, ramdisk_image + ramdisk_size - 1,
|
|
- ramdisk_here, ramdisk_here + ramdisk_size - 1);
|
|
|
|
|
|
+ relocated_ramdisk, relocated_ramdisk + ramdisk_size - 1);
|
|
}
|
|
}
|
|
|
|
|
|
static void __init early_reserve_initrd(void)
|
|
static void __init early_reserve_initrd(void)
|