[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 |