On Wed, 1 Jul 2020 at 16:18, <steve.wahl@xxxxxxx> wrote: > > In removing UV1 support, efi_have_uv1_memmap is no longer used. > > Signed-off-by: Steve Wahl <steve.wahl@xxxxxxx> Reviewed-by: Ard Biesheuvel <ardb@xxxxxxxxxx> > --- > arch/x86/kernel/kexec-bzimage64.c | 9 --------- > arch/x86/platform/efi/efi.c | 14 +++----------- > arch/x86/platform/efi/efi_64.c | 38 +++----------------------------------- > arch/x86/platform/efi/quirks.c | 8 -------- > 4 files changed, 6 insertions(+), 63 deletions(-) > > --- linux.orig/arch/x86/kernel/kexec-bzimage64.c 2020-06-25 13:17:57.780344455 -0500 > +++ linux/arch/x86/kernel/kexec-bzimage64.c 2020-06-25 14:13:03.012966676 -0500 > @@ -170,15 +170,6 @@ setup_efi_state(struct boot_params *para > if (!current_ei->efi_memmap_size) > return 0; > > - /* > - * If 1:1 mapping is not enabled, second kernel can not setup EFI > - * and use EFI run time services. User space will have to pass > - * acpi_rsdp=<addr> on kernel command line to make second kernel boot > - * without efi. > - */ > - if (efi_have_uv1_memmap()) > - return 0; > - > params->secure_boot = boot_params.secure_boot; > ei->efi_loader_signature = current_ei->efi_loader_signature; > ei->efi_systab = current_ei->efi_systab; > --- linux.orig/arch/x86/platform/efi/efi.c 2020-06-25 13:17:57.780344455 -0500 > +++ linux/arch/x86/platform/efi/efi.c 2020-06-25 15:44:12.355019679 -0500 > @@ -648,7 +648,7 @@ static inline void *efi_map_next_entry_r > */ > static void *efi_map_next_entry(void *entry) > { > - if (!efi_have_uv1_memmap() && efi_enabled(EFI_64BIT)) { > + if (efi_enabled(EFI_64BIT)) { > /* > * Starting in UEFI v2.5 the EFI_PROPERTIES_TABLE > * config table feature requires us to map all entries > @@ -777,11 +777,9 @@ static void __init kexec_enter_virtual_m > > /* > * We don't do virtual mode, since we don't do runtime services, on > - * non-native EFI. With the UV1 memmap, we don't do runtime services in > - * kexec kernel because in the initial boot something else might > - * have been mapped at these virtual addresses. > + * non-native EFI. > */ > - if (efi_is_mixed() || efi_have_uv1_memmap()) { > + if (efi_is_mixed()) { > efi_memmap_unmap(); > clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); > return; > @@ -832,12 +830,6 @@ static void __init kexec_enter_virtual_m > * has the runtime attribute bit set in its memory descriptor into the > * efi_pgd page table. > * > - * The old method which used to update that memory descriptor with the > - * virtual address obtained from ioremap() is still supported when the > - * kernel is booted on SG1 UV1 hardware. Same old method enabled the > - * runtime services to be called without having to thunk back into > - * physical mode for every invocation. > - * > * The new method does a pagetable switch in a preemption-safe manner > * so that we're in a different address space when calling a runtime > * function. For function arguments passing we do copy the PUDs of the > --- linux.orig/arch/x86/platform/efi/efi_64.c 2020-06-25 13:17:57.780344455 -0500 > +++ linux/arch/x86/platform/efi/efi_64.c 2020-06-25 14:13:03.044966641 -0500 > @@ -74,9 +74,6 @@ int __init efi_alloc_page_tables(void) > pud_t *pud; > gfp_t gfp_mask; > > - if (efi_have_uv1_memmap()) > - return 0; > - > gfp_mask = GFP_KERNEL | __GFP_ZERO; > efi_pgd = (pgd_t *)__get_free_pages(gfp_mask, PGD_ALLOCATION_ORDER); > if (!efi_pgd) > @@ -115,9 +112,6 @@ void efi_sync_low_kernel_mappings(void) > pud_t *pud_k, *pud_efi; > pgd_t *efi_pgd = efi_mm.pgd; > > - if (efi_have_uv1_memmap()) > - return; > - > /* > * We can share all PGD entries apart from the one entry that > * covers the EFI runtime mapping space. > @@ -206,9 +200,6 @@ int __init efi_setup_page_tables(unsigne > unsigned npages; > pgd_t *pgd = efi_mm.pgd; > > - if (efi_have_uv1_memmap()) > - return 0; > - > /* > * It can happen that the physical address of new_memmap lands in memory > * which is not mapped in the EFI page table. Therefore we need to go > @@ -315,9 +306,6 @@ void __init efi_map_region(efi_memory_de > unsigned long size = md->num_pages << PAGE_SHIFT; > u64 pa = md->phys_addr; > > - if (efi_have_uv1_memmap()) > - return old_map_region(md); > - > /* > * Make sure the 1:1 mappings are present as a catch-all for b0rked > * firmware which doesn't update all internal pointers after switching > @@ -420,12 +408,6 @@ void __init efi_runtime_update_mappings( > { > efi_memory_desc_t *md; > > - if (efi_have_uv1_memmap()) { > - if (__supported_pte_mask & _PAGE_NX) > - runtime_code_page_mkexec(); > - return; > - } > - > /* > * Use the EFI Memory Attribute Table for mapping permissions if it > * exists, since it is intended to supersede EFI_PROPERTIES_TABLE. > @@ -474,10 +456,7 @@ void __init efi_runtime_update_mappings( > void __init efi_dump_pagetable(void) > { > #ifdef CONFIG_EFI_PGT_DUMP > - if (efi_have_uv1_memmap()) > - ptdump_walk_pgd_level(NULL, &init_mm); > - else > - ptdump_walk_pgd_level(NULL, &efi_mm); > + ptdump_walk_pgd_level(NULL, &efi_mm); > #endif > } > > @@ -849,21 +828,13 @@ efi_set_virtual_address_map(unsigned lon > const efi_system_table_t *systab = (efi_system_table_t *)systab_phys; > efi_status_t status; > unsigned long flags; > - pgd_t *save_pgd = NULL; > > if (efi_is_mixed()) > return efi_thunk_set_virtual_address_map(memory_map_size, > descriptor_size, > descriptor_version, > virtual_map); > - > - if (efi_have_uv1_memmap()) { > - save_pgd = efi_uv1_memmap_phys_prolog(); > - if (!save_pgd) > - return EFI_ABORTED; > - } else { > - efi_switch_mm(&efi_mm); > - } > + efi_switch_mm(&efi_mm); > > kernel_fpu_begin(); > > @@ -879,10 +850,7 @@ efi_set_virtual_address_map(unsigned lon > /* grab the virtually remapped EFI runtime services table pointer */ > efi.runtime = READ_ONCE(systab->runtime); > > - if (save_pgd) > - efi_uv1_memmap_phys_epilog(save_pgd); > - else > - efi_switch_mm(efi_scratch.prev_mm); > + efi_switch_mm(efi_scratch.prev_mm); > > return status; > } > --- linux.orig/arch/x86/platform/efi/quirks.c 2020-06-25 14:11:39.301053295 -0500 > +++ linux/arch/x86/platform/efi/quirks.c 2020-06-25 14:13:03.048966638 -0500 > @@ -381,14 +381,6 @@ static void __init efi_unmap_pages(efi_m > u64 va = md->virt_addr; > > /* > - * To Do: Remove this check after adding functionality to unmap EFI boot > - * services code/data regions from direct mapping area because the UV1 > - * memory map maps EFI regions in swapper_pg_dir. > - */ > - if (efi_have_uv1_memmap()) > - return; > - > - /* > * EFI mixed mode has all RAM mapped to access arguments while making > * EFI runtime calls, hence don't unmap EFI boot services code/data > * regions. >