*/
                status = efi_random_alloc(*reserve_size, min_kimg_align,
                                          reserve_addr, phys_seed,
-                                         EFI_LOADER_CODE);
+                                         EFI_LOADER_CODE, EFI_ALLOC_LIMIT);
                if (status != EFI_SUCCESS)
                        efi_warn("efi_random_alloc() failed: 0x%lx\n", status);
        } else {
 
 
 efi_status_t efi_random_alloc(unsigned long size, unsigned long align,
                              unsigned long *addr, unsigned long random_seed,
-                             int memory_type);
+                             int memory_type, unsigned long alloc_limit);
 
 efi_status_t efi_random_get_seed(void);
 
 
  */
 static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
                                         unsigned long size,
-                                        unsigned long align_shift)
+                                        unsigned long align_shift,
+                                        u64 alloc_limit)
 {
        unsigned long align = 1UL << align_shift;
        u64 first_slot, last_slot, region_end;
                return 0;
 
        region_end = min(md->phys_addr + md->num_pages * EFI_PAGE_SIZE - 1,
-                        (u64)EFI_ALLOC_LIMIT);
+                        alloc_limit);
        if (region_end < size)
                return 0;
 
                              unsigned long align,
                              unsigned long *addr,
                              unsigned long random_seed,
-                             int memory_type)
+                             int memory_type,
+                             unsigned long alloc_limit)
 {
        unsigned long total_slots = 0, target_slot;
        unsigned long total_mirrored_slots = 0;
                efi_memory_desc_t *md = (void *)map->map + map_offset;
                unsigned long slots;
 
-               slots = get_entry_num_slots(md, size, ilog2(align));
+               slots = get_entry_num_slots(md, size, ilog2(align), alloc_limit);
                MD_NUM_SLOTS(md) = slots;
                total_slots += slots;
                if (md->attribute & EFI_MEMORY_MORE_RELIABLE)
 
                }
 
                status = efi_random_alloc(alloc_size, min_kimg_align, &image_base,
-                                         seed, EFI_LOADER_CODE);
+                                         seed, EFI_LOADER_CODE, EFI_ALLOC_LIMIT);
                if (status != EFI_SUCCESS) {
                        efi_err("Failed to allocate memory\n");
                        goto free_cmdline;