*/
 static bool check_image_region(u64 base, u64 size)
 {
-       struct efi_boot_memmap *map;
+       struct efi_boot_memmap *map __free(efi_pool) = NULL;
        efi_status_t status;
        bool ret = false;
        int map_offset;
                }
        }
 
-       efi_bs_call(free_pool, map);
-
        return ret;
 }
 
 
 efi_status_t efi_get_memory_map(struct efi_boot_memmap **map,
                                bool install_cfg_tbl)
 {
+       struct efi_boot_memmap tmp, *m __free(efi_pool) = NULL;
        int memtype = install_cfg_tbl ? EFI_ACPI_RECLAIM_MEMORY
                                      : EFI_LOADER_DATA;
        efi_guid_t tbl_guid = LINUX_EFI_BOOT_MEMMAP_GUID;
-       struct efi_boot_memmap *m, tmp;
        efi_status_t status;
        unsigned long size;
 
                 */
                status = efi_bs_call(install_configuration_table, &tbl_guid, m);
                if (status != EFI_SUCCESS)
-                       goto free_map;
+                       return status;
        }
 
        m->buff_size = m->map_size = size;
        status = efi_bs_call(get_memory_map, &m->map_size, m->map, &m->map_key,
                             &m->desc_size, &m->desc_ver);
-       if (status != EFI_SUCCESS)
-               goto uninstall_table;
+       if (status != EFI_SUCCESS) {
+               if (install_cfg_tbl)
+                       efi_bs_call(install_configuration_table, &tbl_guid, NULL);
+               return status;
+       }
 
-       *map = m;
+       *map = no_free_ptr(m);
        return EFI_SUCCESS;
-
-uninstall_table:
-       if (install_cfg_tbl)
-               efi_bs_call(install_configuration_table, &tbl_guid, NULL);
-free_map:
-       efi_bs_call(free_pool, m);
-       return status;
 }
 
 /**
 
                              unsigned long alloc_min,
                              unsigned long alloc_max)
 {
+       struct efi_boot_memmap *map __free(efi_pool) = NULL;
        unsigned long total_slots = 0, target_slot;
        unsigned long total_mirrored_slots = 0;
-       struct efi_boot_memmap *map;
        efi_status_t status;
        int map_offset;
 
                break;
        }
 
-       efi_bs_call(free_pool, map);
-
        return status;
 }
 
 efi_status_t efi_low_alloc_above(unsigned long size, unsigned long align,
                                 unsigned long *addr, unsigned long min)
 {
-       struct efi_boot_memmap *map;
+       struct efi_boot_memmap *map __free(efi_pool) = NULL;
        efi_status_t status;
        unsigned long nr_pages;
        int i;
 
        status = efi_get_memory_map(&map, false);
        if (status != EFI_SUCCESS)
-               goto fail;
+               return status;
 
        /*
         * Enforce minimum alignment that EFI or Linux requires when
        }
 
        if (i == map->map_size / map->desc_size)
-               status = EFI_NOT_FOUND;
+               return EFI_NOT_FOUND;
 
-       efi_bs_call(free_pool, map);
-fail:
-       return status;
+       return EFI_SUCCESS;
 }
 
 /**
 
                                  struct setup_data **e820ext,
                                  u32 *e820ext_size)
 {
-       struct efi_boot_memmap *map;
+       struct efi_boot_memmap *map __free(efi_pool) = NULL;
        efi_status_t status;
        __u32 nr_desc;
 
                                 EFI_MMAP_NR_SLACK_SLOTS;
 
                status = alloc_e820ext(nr_e820ext, e820ext, e820ext_size);
+               if (status != EFI_SUCCESS)
+                       return status;
        }
 
-       if (IS_ENABLED(CONFIG_UNACCEPTED_MEMORY) && status == EFI_SUCCESS)
-               status = allocate_unaccepted_bitmap(nr_desc, map);
+       if (IS_ENABLED(CONFIG_UNACCEPTED_MEMORY))
+               return allocate_unaccepted_bitmap(nr_desc, map);
 
-       efi_bs_call(free_pool, map);
-       return status;
+       return EFI_SUCCESS;
 }
 
 struct exit_boot_struct {