Remove grub_efi_allocate_pages.

grub_efi_allocate_pages Essentially does 2 unrelated things:
* Allocate at fixed address.
* Allocate at any address.

To switch between 2 different functions it uses address == 0 as magic
value which is wrong as 0 is a perfectly valid fixed adress to allocate at.
This commit is contained in:
Vladimir Serbinenko 2017-08-07 18:33:29 +02:00 committed by Vincent Batts
parent 22619f1593
commit 6825a1d3f1
8 changed files with 30 additions and 34 deletions

View file

@ -146,7 +146,7 @@ grub_efi_allocate_loader_memory (grub_uint32_t min_offset, grub_uint32_t size)
continue; continue;
grub_dprintf("mm", "%s: let's allocate some (0x%x) pages @ 0x%08x...\n", grub_dprintf("mm", "%s: let's allocate some (0x%x) pages @ 0x%08x...\n",
__FUNCTION__, (size >> PAGE_SHIFT), (grub_addr_t) start); __FUNCTION__, (size >> PAGE_SHIFT), (grub_addr_t) start);
mem = grub_efi_allocate_pages (start, (size >> PAGE_SHIFT) + 1); mem = grub_efi_allocate_fixed (start, (size >> PAGE_SHIFT) + 1);
grub_dprintf("mm", "%s: retval=0x%08x\n", grub_dprintf("mm", "%s: retval=0x%08x\n",
__FUNCTION__, (grub_addr_t) mem); __FUNCTION__, (grub_addr_t) mem);
if (! mem) if (! mem)
@ -189,7 +189,7 @@ grub_efi_prepare_platform (void)
mmap_size = find_mmap_size (); mmap_size = find_mmap_size ();
if (! mmap_size) if (! mmap_size)
return GRUB_ERR_OUT_OF_MEMORY; return GRUB_ERR_OUT_OF_MEMORY;
mmap_buf = grub_efi_allocate_pages (0, page_align (mmap_size) >> 12); mmap_buf = grub_efi_allocate_any_pages (page_align (mmap_size) >> 12);
if (! mmap_buf) if (! mmap_buf)
return GRUB_ERR_OUT_OF_MEMORY; return GRUB_ERR_OUT_OF_MEMORY;

View file

@ -115,20 +115,19 @@ grub_efi_allocate_pages_real (grub_efi_physical_address_t address,
} }
void * void *
grub_efi_allocate_pages (grub_efi_physical_address_t address, grub_efi_allocate_any_pages (grub_efi_uintn_t pages)
{
return grub_efi_allocate_pages_real (GRUB_EFI_MAX_USABLE_ADDRESS,
pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS,
GRUB_EFI_LOADER_DATA);
}
void *
grub_efi_allocate_fixed (grub_efi_physical_address_t address,
grub_efi_uintn_t pages) grub_efi_uintn_t pages)
{ {
grub_efi_allocate_type_t alloctype; return grub_efi_allocate_pages_real (address, pages,
GRUB_EFI_ALLOCATE_ADDRESS,
if (address == 0)
{
alloctype = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
address = GRUB_EFI_MAX_USABLE_ADDRESS;
}
else
alloctype = GRUB_EFI_ALLOCATE_ADDRESS;
return grub_efi_allocate_pages_real (address, pages, alloctype,
GRUB_EFI_LOADER_DATA); GRUB_EFI_LOADER_DATA);
} }
@ -436,7 +435,7 @@ add_memory_regions (grub_efi_memory_descriptor_t *memory_map,
pages = required_pages; pages = required_pages;
} }
addr = grub_efi_allocate_pages (start, pages); addr = grub_efi_allocate_fixed (start, pages);
if (! addr) if (! addr)
grub_fatal ("cannot allocate conventional memory %p with %u pages", grub_fatal ("cannot allocate conventional memory %p with %u pages",
(void *) ((grub_addr_t) start), (void *) ((grub_addr_t) start),
@ -488,8 +487,7 @@ grub_efi_mm_init (void)
int mm_status; int mm_status;
/* Prepare a memory region to store two memory maps. */ /* Prepare a memory region to store two memory maps. */
memory_map = grub_efi_allocate_pages (0, memory_map = grub_efi_allocate_any_pages (2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE));
2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE));
if (! memory_map) if (! memory_map)
grub_fatal ("cannot allocate memory"); grub_fatal ("cannot allocate memory");
@ -507,7 +505,7 @@ grub_efi_mm_init (void)
/* Freeing/allocating operations may increase memory map size. */ /* Freeing/allocating operations may increase memory map size. */
map_size += desc_size * 32; map_size += desc_size * 32;
memory_map = grub_efi_allocate_pages (0, 2 * BYTES_TO_PAGES (map_size)); memory_map = grub_efi_allocate_any_pages (2 * BYTES_TO_PAGES (map_size));
if (! memory_map) if (! memory_map)
grub_fatal ("cannot allocate memory"); grub_fatal ("cannot allocate memory");

View file

@ -50,7 +50,7 @@ grub_fdt_load (grub_size_t additional_size)
size += additional_size; size += additional_size;
grub_dprintf ("linux", "allocating %ld bytes for fdt\n", size); grub_dprintf ("linux", "allocating %ld bytes for fdt\n", size);
fdt = grub_efi_allocate_pages (0, GRUB_EFI_BYTES_TO_PAGES (size)); fdt = grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (size));
if (!fdt) if (!fdt)
return NULL; return NULL;

View file

@ -150,8 +150,7 @@ grub_arm64_uefi_boot_image (grub_addr_t addr, grub_size_t size, char *args)
loaded_image->load_options_size = len = loaded_image->load_options_size = len =
(grub_strlen (args) + 1) * sizeof (grub_efi_char16_t); (grub_strlen (args) + 1) * sizeof (grub_efi_char16_t);
loaded_image->load_options = loaded_image->load_options =
grub_efi_allocate_pages (0, grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (loaded_image->load_options_size));
GRUB_EFI_BYTES_TO_PAGES (loaded_image->load_options_size));
if (!loaded_image->load_options) if (!loaded_image->load_options)
return grub_errno; return grub_errno;
@ -225,7 +224,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
grub_dprintf ("linux", "Loading initrd\n"); grub_dprintf ("linux", "Loading initrd\n");
initrd_pages = (GRUB_EFI_BYTES_TO_PAGES (initrd_size)); initrd_pages = (GRUB_EFI_BYTES_TO_PAGES (initrd_size));
initrd_mem = grub_efi_allocate_pages (0, initrd_pages); initrd_mem = grub_efi_allocate_any_pages (initrd_pages);
if (!initrd_mem) if (!initrd_mem)
{ {
grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
@ -279,7 +278,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
grub_loader_unset(); grub_loader_unset();
grub_dprintf ("linux", "kernel file size: %lld\n", (long long) kernel_size); grub_dprintf ("linux", "kernel file size: %lld\n", (long long) kernel_size);
kernel_addr = grub_efi_allocate_pages (0, GRUB_EFI_BYTES_TO_PAGES (kernel_size)); kernel_addr = grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (kernel_size));
grub_dprintf ("linux", "kernel numpages: %lld\n", grub_dprintf ("linux", "kernel numpages: %lld\n",
(long long) GRUB_EFI_BYTES_TO_PAGES (kernel_size)); (long long) GRUB_EFI_BYTES_TO_PAGES (kernel_size));
if (!kernel_addr) if (!kernel_addr)

View file

@ -324,10 +324,9 @@ xen_boot_binary_load (struct xen_boot_binary *binary, grub_file_t file,
grub_dprintf ("xen_loader", "Xen_boot file size: 0x%lx\n", binary->size); grub_dprintf ("xen_loader", "Xen_boot file size: 0x%lx\n", binary->size);
binary->start binary->start
= (grub_addr_t) grub_efi_allocate_pages (0, = (grub_addr_t) grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES
GRUB_EFI_BYTES_TO_PAGES (binary->size +
(binary->size + binary->align));
binary->align));
if (!binary->start) if (!binary->start)
{ {
grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));

View file

@ -252,7 +252,7 @@ allocate_pages (grub_uint64_t align, grub_uint64_t size_pages,
aligned_start += align; aligned_start += align;
if (aligned_start + size > end) if (aligned_start + size > end)
continue; continue;
mem = grub_efi_allocate_pages (aligned_start, size_pages); mem = grub_efi_allocate_fixed (aligned_start, size_pages);
if (! mem) if (! mem)
{ {
grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory"); grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory");
@ -326,7 +326,7 @@ grub_linux_boot (void)
mmap_size = find_mmap_size (); mmap_size = find_mmap_size ();
if (! mmap_size) if (! mmap_size)
return grub_errno; return grub_errno;
mmap_buf = grub_efi_allocate_pages (0, page_align (mmap_size) >> 12); mmap_buf = grub_efi_allocate_any_pages (page_align (mmap_size) >> 12);
if (! mmap_buf) if (! mmap_buf)
return grub_error (GRUB_ERR_IO, "cannot allocate memory map"); return grub_error (GRUB_ERR_IO, "cannot allocate memory map");
err = grub_efi_finish_boot_services (&mmap_size, mmap_buf, &map_key, err = grub_efi_finish_boot_services (&mmap_size, mmap_buf, &map_key,
@ -422,7 +422,7 @@ grub_load_elf64 (grub_file_t file, void *buffer, const char *filename)
relocate = grub_env_get ("linux_relocate"); relocate = grub_env_get ("linux_relocate");
if (!relocate || grub_strcmp (relocate, "force") != 0) if (!relocate || grub_strcmp (relocate, "force") != 0)
{ {
kernel_mem = grub_efi_allocate_pages (low_addr, kernel_pages); kernel_mem = grub_efi_allocate_fixed (low_addr, kernel_pages);
reloc_offset = 0; reloc_offset = 0;
} }
/* Try to relocate. */ /* Try to relocate. */
@ -524,7 +524,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
len += grub_strlen (argv[i]) + 1; len += grub_strlen (argv[i]) + 1;
len += sizeof (struct ia64_boot_param) + 512; /* Room for extensions. */ len += sizeof (struct ia64_boot_param) + 512; /* Room for extensions. */
boot_param_pages = page_align (len) >> 12; boot_param_pages = page_align (len) >> 12;
boot_param = grub_efi_allocate_pages (0, boot_param_pages); boot_param = grub_efi_allocate_any_pages (boot_param_pages);
if (boot_param == 0) if (boot_param == 0)
{ {
grub_error (GRUB_ERR_OUT_OF_MEMORY, grub_error (GRUB_ERR_OUT_OF_MEMORY,
@ -589,7 +589,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
grub_dprintf ("linux", "Loading initrd\n"); grub_dprintf ("linux", "Loading initrd\n");
initrd_pages = (page_align (initrd_size) >> 12); initrd_pages = (page_align (initrd_size) >> 12);
initrd_mem = grub_efi_allocate_pages (0, initrd_pages); initrd_mem = grub_efi_allocate_any_pages (initrd_pages);
if (! initrd_mem) if (! initrd_mem)
{ {
grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate pages"); grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate pages");

View file

@ -55,7 +55,7 @@ static inline grub_err_t grub_autoefi_prepare (void)
# define SYSTEM_TABLE_PTR GRUB_EFIEMU_SYSTEM_TABLE_PTR # define SYSTEM_TABLE_PTR GRUB_EFIEMU_SYSTEM_TABLE_PTR
# define SIZEOF_OF_UINTN GRUB_EFIEMU_SIZEOF_OF_UINTN # define SIZEOF_OF_UINTN GRUB_EFIEMU_SIZEOF_OF_UINTN
# define SYSTEM_TABLE GRUB_EFIEMU_SYSTEM_TABLE # define SYSTEM_TABLE GRUB_EFIEMU_SYSTEM_TABLE
# define grub_efi_allocate_pages(x,y) (x) # define grub_efi_allocate_fixed(x,y) (x)
# define grub_efi_free_pages(x,y) GRUB_EFI_SUCCESS # define grub_efi_free_pages(x,y) GRUB_EFI_SUCCESS
# define grub_autoefi_finish_boot_services grub_efiemu_finish_boot_services # define grub_autoefi_finish_boot_services grub_efiemu_finish_boot_services
# define EFI_PRESENT 1 # define EFI_PRESENT 1

View file

@ -43,7 +43,7 @@ EXPORT_FUNC(grub_efi_allocate_pages_real) (grub_efi_physical_address_t address,
grub_efi_allocate_type_t alloctype, grub_efi_allocate_type_t alloctype,
grub_efi_memory_type_t memtype); grub_efi_memory_type_t memtype);
void * void *
EXPORT_FUNC(grub_efi_allocate_pages) (grub_efi_physical_address_t address, EXPORT_FUNC(grub_efi_allocate_fixed) (grub_efi_physical_address_t address,
grub_efi_uintn_t pages); grub_efi_uintn_t pages);
void * void *
EXPORT_FUNC(grub_efi_allocate_pages_max) (grub_efi_physical_address_t max, EXPORT_FUNC(grub_efi_allocate_pages_max) (grub_efi_physical_address_t max,