|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] Revert "EFI: preserve the System Resource Table for dom0"
commit 786049720041539409f47c6c1a1e718de490cf37
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Wed Jul 6 13:05:23 2022 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Wed Jul 6 13:05:23 2022 +0200
Revert "EFI: preserve the System Resource Table for dom0"
This reverts commit 8d410ac2c178e1dd1001cadddbe9ca75a9738c95,
for breaking booting (on at least Arm64), apparently due to
incomplete refactoring from an earlier version.
---
xen/common/efi/boot.c | 135 --------------------------------------------------
1 file changed, 135 deletions(-)
diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
index e35f56e9ec..a25e1d29f1 100644
--- a/xen/common/efi/boot.c
+++ b/xen/common/efi/boot.c
@@ -39,26 +39,6 @@
{ 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b,
0x23} }
#define APPLE_PROPERTIES_PROTOCOL_GUID \
{ 0x91bd12fe, 0xf6c3, 0x44fb, { 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a,
0xe0} }
-#define EFI_SYSTEM_RESOURCE_TABLE_GUID \
- { 0xb122a263, 0x3661, 0x4f68, {0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21,
0x80} }
-#define EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION 1
-
-typedef struct {
- EFI_GUID FwClass;
- UINT32 FwType;
- UINT32 FwVersion;
- UINT32 LowestSupportedFwVersion;
- UINT32 CapsuleFlags;
- UINT32 LastAttemptVersion;
- UINT32 LastAttemptStatus;
-} EFI_SYSTEM_RESOURCE_ENTRY;
-
-typedef struct {
- UINT32 FwResourceCount;
- UINT32 FwResourceCountMax;
- UINT64 FwResourceVersion;
- EFI_SYSTEM_RESOURCE_ENTRY Entries[];
-} EFI_SYSTEM_RESOURCE_TABLE;
typedef EFI_STATUS
(/* _not_ EFIAPI */ *EFI_SHIM_LOCK_VERIFY) (
@@ -587,41 +567,6 @@ static int __init efi_check_dt_boot(const EFI_LOADED_IMAGE
*loaded_image)
}
#endif
-static UINTN __initdata esrt = EFI_INVALID_TABLE_ADDR;
-
-static size_t __init get_esrt_size(const EFI_MEMORY_DESCRIPTOR *desc)
-{
- size_t available_len, len;
- const UINTN physical_start = desc->PhysicalStart;
- const EFI_SYSTEM_RESOURCE_TABLE *esrt_ptr;
-
- len = desc->NumberOfPages << EFI_PAGE_SHIFT;
- if ( esrt == EFI_INVALID_TABLE_ADDR )
- return 0;
- if ( physical_start > esrt || esrt - physical_start >= len )
- return 0;
- /*
- * The specification requires EfiBootServicesData, but accept
- * EfiRuntimeServicesData, which is a more logical choice.
- */
- if ( (desc->Type != EfiRuntimeServicesData) &&
- (desc->Type != EfiBootServicesData) )
- return 0;
- available_len = len - (esrt - physical_start);
- if ( available_len <= offsetof(EFI_SYSTEM_RESOURCE_TABLE, Entries) )
- return 0;
- available_len -= offsetof(EFI_SYSTEM_RESOURCE_TABLE, Entries);
- esrt_ptr = (const EFI_SYSTEM_RESOURCE_TABLE *)esrt;
- if ( (esrt_ptr->FwResourceVersion !=
- EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION) ||
- !esrt_ptr->FwResourceCount )
- return 0;
- if ( esrt_ptr->FwResourceCount > available_len /
sizeof(esrt_ptr->Entries[0]) )
- return 0;
-
- return esrt_ptr->FwResourceCount * sizeof(esrt_ptr->Entries[0]);
-}
-
/*
* Include architecture specific implementation here, which references the
* static globals defined above.
@@ -900,8 +845,6 @@ static UINTN __init
efi_find_gop_mode(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
return gop_mode;
}
-static EFI_GUID __initdata esrt_guid = EFI_SYSTEM_RESOURCE_TABLE_GUID;
-
static void __init efi_tables(void)
{
unsigned int i;
@@ -925,8 +868,6 @@ static void __init efi_tables(void)
efi.smbios = (unsigned long)efi_ct[i].VendorTable;
if ( match_guid(&smbios3_guid, &efi_ct[i].VendorGuid) )
efi.smbios3 = (unsigned long)efi_ct[i].VendorTable;
- if ( match_guid(&esrt_guid, &efi_ct[i].VendorGuid) )
- esrt = (UINTN)efi_ct[i].VendorTable;
}
#ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */
@@ -1110,71 +1051,6 @@ static void __init
efi_set_gop_mode(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, UINTN gop
#define INVALID_VIRTUAL_ADDRESS (0xBAAADUL << \
(EFI_PAGE_SHIFT + BITS_PER_LONG - 32))
-static void __init efi_relocate_esrt(EFI_SYSTEM_TABLE *SystemTable)
-{
- EFI_STATUS status;
- UINTN info_size = 0, map_key, mdesc_size;
- void *memory_map = NULL;
- UINT32 ver;
- unsigned int i;
-
- for ( ; ; )
- {
- status = efi_bs->GetMemoryMap(&info_size, memory_map, &map_key,
- &mdesc_size, &ver);
- if ( status == EFI_SUCCESS && memory_map != NULL )
- break;
- if ( status == EFI_BUFFER_TOO_SMALL || memory_map == NULL )
- {
- info_size += 8 * efi_mdesc_size;
- if ( memory_map != NULL )
- efi_bs->FreePool(memory_map);
- memory_map = NULL;
- status = efi_bs->AllocatePool(EfiLoaderData, info_size,
&memory_map);
- if ( status == EFI_SUCCESS )
- continue;
- PrintErr(L"Cannot allocate memory to relocate ESRT\r\n");
- }
- else
- PrintErr(L"Cannot obtain memory map to relocate ESRT\r\n");
- return;
- }
-
- /* Try to obtain the ESRT. Errors are not fatal. */
- for ( i = 0; i < info_size; i += efi_mdesc_size )
- {
- /*
- * ESRT needs to be moved to memory of type EfiRuntimeServicesData
- * so that the memory it is in will not be used for other purposes.
- */
- void *new_esrt = NULL;
- size_t esrt_size = get_esrt_size(efi_memmap + i);
-
- if ( !esrt_size )
- continue;
- if ( ((EFI_MEMORY_DESCRIPTOR *)(efi_memmap + i))->Type ==
- EfiRuntimeServicesData )
- break; /* ESRT already safe from reuse */
- status = efi_bs->AllocatePool(EfiRuntimeServicesData, esrt_size,
- &new_esrt);
- if ( status == EFI_SUCCESS && new_esrt )
- {
- memcpy(new_esrt, (void *)esrt, esrt_size);
- status = efi_bs->InstallConfigurationTable(&esrt_guid, new_esrt);
- if ( status != EFI_SUCCESS )
- {
- PrintErr(L"Cannot install new ESRT\r\n");
- efi_bs->FreePool(new_esrt);
- }
- }
- else
- PrintErr(L"Cannot allocate memory for ESRT\r\n");
- break;
- }
-
- efi_bs->FreePool(memory_map);
-}
-
static void __init efi_exit_boot(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE
*SystemTable)
{
EFI_STATUS status;
@@ -1537,8 +1413,6 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE
*SystemTable)
if ( gop )
efi_set_gop_mode(gop, gop_mode);
- efi_relocate_esrt(SystemTable);
-
efi_exit_boot(ImageHandle, SystemTable);
efi_arch_post_exit_boot(); /* Doesn't return. */
@@ -1879,12 +1753,3 @@ void __init efi_init_memory(void)
unmap_domain_page(efi_l4t);
}
#endif
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |