Module Name: src Committed By: manu Date: Fri Oct 18 00:56:25 UTC 2019
Modified Files: src/sys/arch/x86/x86: efi.c Log Message: Fix EFI system table mapping in virtual space Previous version was annoted as untested, and indeed it did not work. New version uses the same approach as for ACPI table mapping. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/x86/x86/efi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/efi.c diff -u src/sys/arch/x86/x86/efi.c:1.19 src/sys/arch/x86/x86/efi.c:1.20 --- src/sys/arch/x86/x86/efi.c:1.19 Mon Dec 3 19:46:43 2018 +++ src/sys/arch/x86/x86/efi.c Fri Oct 18 00:56:25 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: efi.c,v 1.19 2018/12/03 19:46:43 cherry Exp $ */ +/* $NetBSD: efi.c,v 1.20 2019/10/18 00:56:25 manu Exp $ */ /*- * Copyright (c) 2016 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.19 2018/12/03 19:46:43 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.20 2019/10/18 00:56:25 manu Exp $"); #include <sys/kmem.h> #include <sys/param.h> @@ -37,6 +37,8 @@ __KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.19 #include <uvm/uvm_extern.h> #include <machine/bootinfo.h> +#include <x86/bus_defs.h> +#include <x86/bus_funcs.h> #include <x86/efi.h> #include <dev/mm.h> @@ -73,21 +75,19 @@ static vaddr_t efi_getva(paddr_t pa) { vaddr_t va; + int rv; #ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS if (mm_md_direct_mapped_phys(pa, &va)) return va; #endif - /* XXX This code path is not tested. */ - va = uvm_km_alloc(kernel_map, PAGE_SIZE, 0, - UVM_KMF_VAONLY | UVM_KMF_WAITVA); - if (va == 0) { + rv = _x86_memio_map(x86_bus_space_mem, pa, + PAGE_SIZE, 0, (bus_space_handle_t *)&va); + if (rv != 0) { aprint_debug("efi: unable to allocate va\n"); return 0; } - pmap_kenter_pa(va, pa, VM_PROT_READ, 0); - pmap_update(pmap_kernel()); return va; } @@ -107,10 +107,8 @@ efi_relva(paddr_t pa, vaddr_t va) } #endif - /* XXX This code path is not tested. */ - pmap_kremove(va, PAGE_SIZE); - pmap_update(pmap_kernel()); - uvm_km_free(kernel_map, va, PAGE_SIZE, UVM_KMF_VAONLY); + (void)_x86_memio_unmap(x86_bus_space_mem, (bus_space_handle_t)va, + PAGE_SIZE, NULL); } /*