}
 
        memcpy(&tmpesrt, va, sizeof(tmpesrt));
+       early_memunmap(va, size);
 
        if (tmpesrt.fw_resource_version == 1) {
                entry_size = sizeof (*v1_entries);
        if (tmpesrt.fw_resource_count > 0 && max - size < entry_size) {
                pr_err("ESRT memory map entry can only hold the header. (max: %zu size: %zu)\n",
                       max - size, entry_size);
-               goto err_memunmap;
+               return;
        }
 
        /*
        if (tmpesrt.fw_resource_count > 128) {
                pr_err("ESRT says fw_resource_count has very large value %d.\n",
                       tmpesrt.fw_resource_count);
-               goto err_memunmap;
+               return;
        }
 
        /*
        if (max < size + entries_size) {
                pr_err("ESRT does not fit on single memory map entry (size: %zu max: %zu)\n",
                       size, max);
-               goto err_memunmap;
+               return;
        }
 
-       /* remap it with our (plausible) new pages */
-       early_memunmap(va, size);
        size += entries_size;
-       va = early_memremap(efi.esrt, size);
-       if (!va) {
-               pr_err("early_memremap(%p, %zu) failed.\n", (void *)efi.esrt,
-                      size);
-               return;
-       }
 
        esrt_data = (phys_addr_t)efi.esrt;
        esrt_data_size = size;
        efi_mem_reserve(esrt_data, esrt_data_size);
 
        pr_debug("esrt-init: loaded.\n");
-err_memunmap:
-       early_memunmap(va, size);
 }
 
 static int __init register_entries(void)