[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] Revert "EFI: free unused boot mem in at least some cases"
commit 414d22cc092eab4a5b90d2ce594495733b07c77a Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Sep 16 11:16:41 2020 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Sep 16 11:16:41 2020 +0200 Revert "EFI: free unused boot mem in at least some cases" This reverts commit a4cbe0f3b47656ea125922fd48d394731a0163fd, which breaks PV shim in a not yet analyzed way. --- xen/arch/x86/efi/stub.c | 6 ------ xen/arch/x86/setup.c | 26 +++----------------------- xen/arch/x86/tboot.c | 12 ------------ xen/common/efi/ebmalloc.c | 31 +++++-------------------------- xen/include/xen/efi.h | 1 - 5 files changed, 8 insertions(+), 68 deletions(-) diff --git a/xen/arch/x86/efi/stub.c b/xen/arch/x86/efi/stub.c index 0e01e7322b..c578bffc71 100644 --- a/xen/arch/x86/efi/stub.c +++ b/xen/arch/x86/efi/stub.c @@ -52,12 +52,6 @@ bool efi_enabled(unsigned int feature) void __init efi_init_memory(void) { } -bool efi_boot_mem_unused(unsigned long *start, unsigned long *end) -{ - *start = *end = (unsigned long)_end; - return false; -} - void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t l4e) { } bool efi_rs_using_pgtables(void) diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 44c04e2735..4b15e067fa 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -830,7 +830,6 @@ void __init noreturn __start_xen(unsigned long mbi_p) module_t *mod; unsigned long nr_pages, raw_max_page, modules_headroom, module_map[1]; int i, j, e820_warn = 0, bytes = 0; - unsigned long eb_start, eb_end; bool acpi_boot_table_init_done = false, relocated = false; int ret; struct ns16550_defaults ns16550 = { @@ -1146,8 +1145,7 @@ void __init noreturn __start_xen(unsigned long mbi_p) /* * This needs to remain in sync with xen_in_range() and the - * respective reserve_e820_ram() invocation below. No need to - * query efi_boot_mem_unused() here, though. + * respective reserve_e820_ram() invocation below. */ mod[mbi->mods_count].mod_start = virt_to_mfn(_stext); mod[mbi->mods_count].mod_end = __2M_rwdata_end - _stext; @@ -1419,18 +1417,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) if ( !xen_phys_start ) panic("Not enough memory to relocate Xen\n"); - /* FIXME: Putting a hole in .bss would shatter the large page mapping. */ - if ( using_2M_mapping() ) - efi_boot_mem_unused(NULL, NULL); - /* This needs to remain in sync with xen_in_range(). */ - if ( efi_boot_mem_unused(&eb_start, &eb_end) ) - { - reserve_e820_ram(&boot_e820, __pa(_stext), __pa(eb_start)); - reserve_e820_ram(&boot_e820, __pa(eb_end), __pa(__2M_rwdata_end)); - } - else - reserve_e820_ram(&boot_e820, __pa(_stext), __pa(__2M_rwdata_end)); + reserve_e820_ram(&boot_e820, __pa(_stext), __pa(__2M_rwdata_end)); /* Late kexec reservation (dynamic start address). */ kexec_reserve_area(&boot_e820); @@ -1991,7 +1979,7 @@ int __hwdom_init xen_in_range(unsigned long mfn) paddr_t start, end; int i; - enum { region_s3, region_ro, region_rw, region_bss, nr_regions }; + enum { region_s3, region_ro, region_rw, nr_regions }; static struct { paddr_t s, e; } xen_regions[nr_regions] __hwdom_initdata; @@ -2016,14 +2004,6 @@ int __hwdom_init xen_in_range(unsigned long mfn) /* hypervisor .data + .bss */ xen_regions[region_rw].s = __pa(&__2M_rwdata_start); xen_regions[region_rw].e = __pa(&__2M_rwdata_end); - if ( efi_boot_mem_unused(&start, &end) ) - { - ASSERT(__pa(start) >= xen_regions[region_rw].s); - ASSERT(__pa(end) <= xen_regions[region_rw].e); - xen_regions[region_rw].e = __pa(start); - xen_regions[region_bss].s = __pa(end); - xen_regions[region_bss].e = __pa(&__2M_rwdata_end); - } } start = (paddr_t)mfn << PAGE_SHIFT; diff --git a/xen/arch/x86/tboot.c b/xen/arch/x86/tboot.c index aadcce591f..e66b0940c4 100644 --- a/xen/arch/x86/tboot.c +++ b/xen/arch/x86/tboot.c @@ -1,4 +1,3 @@ -#include <xen/efi.h> #include <xen/init.h> #include <xen/types.h> #include <xen/lib.h> @@ -365,8 +364,6 @@ void tboot_shutdown(uint32_t shutdown_type) /* if this is S3 then set regions to MAC */ if ( shutdown_type == TB_SHUTDOWN_S3 ) { - unsigned long s, e; - /* * Xen regions for tboot to MAC. This needs to remain in sync with * xen_in_range(). @@ -381,15 +378,6 @@ void tboot_shutdown(uint32_t shutdown_type) /* hypervisor .data + .bss */ g_tboot_shared->mac_regions[2].start = (uint64_t)__pa(&__2M_rwdata_start); g_tboot_shared->mac_regions[2].size = __2M_rwdata_end - __2M_rwdata_start; - if ( efi_boot_mem_unused(&s, &e) ) - { - g_tboot_shared->mac_regions[2].size = - s - (unsigned long)__2M_rwdata_start; - g_tboot_shared->mac_regions[3].start = __pa(e); - g_tboot_shared->mac_regions[3].size = - (unsigned long)__2M_rwdata_end - e; - g_tboot_shared->num_mac_regions = 4; - } /* * MAC domains and other Xen memory diff --git a/xen/common/efi/ebmalloc.c b/xen/common/efi/ebmalloc.c index 136838eb8e..c65dbd946f 100644 --- a/xen/common/efi/ebmalloc.c +++ b/xen/common/efi/ebmalloc.c @@ -1,6 +1,5 @@ #include "efi.h" #include <xen/init.h> -#include <xen/mm.h> #ifdef CONFIG_ARM /* @@ -22,7 +21,7 @@ static char __section(".bss.page_aligned") __aligned(PAGE_SIZE) ebmalloc_mem[EBMALLOC_SIZE]; -static unsigned long __read_mostly ebmalloc_allocated; +static unsigned long __initdata ebmalloc_allocated; /* EFI boot allocator. */ void __init *ebmalloc(size_t size) @@ -37,37 +36,17 @@ void __init *ebmalloc(size_t size) return ptr; } -bool efi_boot_mem_unused(unsigned long *start, unsigned long *end) -{ - if ( !start && !end ) - { - ebmalloc_allocated = sizeof(ebmalloc_mem); - return false; - } - - *start = (unsigned long)ebmalloc_mem + PAGE_ALIGN(ebmalloc_allocated); - *end = (unsigned long)ebmalloc_mem + sizeof(ebmalloc_mem); - - return *start < *end; -} - void __init free_ebmalloc_unused_mem(void) { +#if 0 /* FIXME: Putting a hole in the BSS breaks the IOMMU mappings for dom0. */ unsigned long start, end; - if ( !efi_boot_mem_unused(&start, &end) ) - return; + start = (unsigned long)ebmalloc_mem + PAGE_ALIGN(ebmalloc_allocated); + end = (unsigned long)ebmalloc_mem + sizeof(ebmalloc_mem); destroy_xen_mappings(start, end); - -#ifdef CONFIG_X86 - /* - * By reserving the space early in the E820 map, it gets freed way before - * we make it here. Don't free the range a 2nd time. - */ -#else init_xenheap_pages(__pa(start), __pa(end)); -#endif printk(XENLOG_INFO "Freed %lukB unused BSS memory\n", (end - start) >> 10); +#endif } diff --git a/xen/include/xen/efi.h b/xen/include/xen/efi.h index 94a7e547f9..44b7d3ec3a 100644 --- a/xen/include/xen/efi.h +++ b/xen/include/xen/efi.h @@ -33,7 +33,6 @@ struct compat_pf_efi_runtime_call; bool efi_enabled(unsigned int feature); void efi_init_memory(void); -bool efi_boot_mem_unused(unsigned long *start, unsigned long *end); bool efi_rs_using_pgtables(void); unsigned long efi_get_time(void); void efi_halt_system(void); -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |