u64 area_size     = PAGE_ALIGN(ramdisk_size);
 
        /* We need to move the initrd down into directly mapped mem */
-       relocated_ramdisk = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
-                                                  area_size, PAGE_SIZE);
-
+       relocated_ramdisk = memblock_phys_alloc_range(area_size, PAGE_SIZE, 0,
+                                                     PFN_PHYS(max_pfn_mapped));
        if (!relocated_ramdisk)
                panic("Cannot find place for new RAMDISK of size %lld\n",
                      ramdisk_size);
 
-       /* Note: this includes all the mem currently occupied by
-          the initrd, we rely on that fact to keep the data intact. */
-       memblock_reserve(relocated_ramdisk, area_size);
        initrd_start = relocated_ramdisk + PAGE_OFFSET;
        initrd_end   = initrd_start + ramdisk_size;
        printk(KERN_INFO "Allocated new RAMDISK: [mem %#010llx-%#010llx]\n",
 
        memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image);
 }
+
 static void __init reserve_initrd(void)
 {
        /* Assume only end is not page aligned */
        u64 ramdisk_image = get_ramdisk_image();
        u64 ramdisk_size  = get_ramdisk_size();
        u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size);
-       u64 mapped_size;
 
        if (!boot_params.hdr.type_of_loader ||
            !ramdisk_image || !ramdisk_size)
 
        initrd_start = 0;
 
-       mapped_size = memblock_mem_size(max_pfn_mapped);
-       if (ramdisk_size >= (mapped_size>>1))
-               panic("initrd too large to handle, "
-                      "disabling initrd (%lld needed, %lld available)\n",
-                      ramdisk_size, mapped_size>>1);
-
        printk(KERN_INFO "RAMDISK: [mem %#010llx-%#010llx]\n", ramdisk_image,
                        ramdisk_end - 1);