From ab6bc04cfdbd5da00a85909c054770a606e7c804 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Sat, 28 Jan 2017 14:19:36 +0100 Subject: [PATCH] x86/boot/e820: Create coherent API function names for E820 range operations We have these three related functions: extern void e820_add_region(u64 start, u64 size, int type); extern u64 e820_update_range(u64 start, u64 size, unsigned old_type, unsigned new_type); extern u64 e820_remove_range(u64 start, u64 size, unsigned old_type, int checktype); But it's not clear from the naming that they are 3 operations based around the same 'memory range' concept. Rename them to better signal this, and move the prototypes next to each other: extern void e820__range_add (u64 start, u64 size, int type); extern u64 e820__range_update(u64 start, u64 size, unsigned old_type, unsigned new_type); extern u64 e820__range_remove(u64 start, u64 size, unsigned old_type, int checktype); Note that this improved organization of the functions shows another problem that was easy to miss before: sometimes the E820 entry type is 'int', sometimes 'unsigned int' - but this will be fixed in a separate patch. No change in functionality. Cc: Alex Thorlton Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Dan Williams Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Huang, Ying Cc: Josh Poimboeuf Cc: Juergen Gross Cc: Linus Torvalds Cc: Paul Jackson Cc: Peter Zijlstra Cc: Rafael J. Wysocki Cc: Tejun Heo Cc: Thomas Gleixner Cc: Wei Yang Cc: Yinghai Lu Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar --- arch/x86/include/asm/e820/api.h | 8 +++-- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/aperture_64.c | 2 +- arch/x86/kernel/cpu/mtrr/cleanup.c | 2 +- arch/x86/kernel/e820.c | 48 +++++++++++++++--------------- arch/x86/kernel/early-quirks.c | 2 +- arch/x86/kernel/setup.c | 10 +++---- arch/x86/lguest/boot.c | 2 +- arch/x86/platform/efi/efi.c | 2 +- arch/x86/xen/setup.c | 6 ++-- drivers/acpi/tables.c | 2 +- 11 files changed, 44 insertions(+), 42 deletions(-) diff --git a/arch/x86/include/asm/e820/api.h b/arch/x86/include/asm/e820/api.h index d4374ba26472..1c3615825115 100644 --- a/arch/x86/include/asm/e820/api.h +++ b/arch/x86/include/asm/e820/api.h @@ -10,11 +10,13 @@ extern unsigned long pci_mem_start; extern int e820__mapped_any(u64 start, u64 end, unsigned type); extern int e820__mapped_all(u64 start, u64 end, unsigned type); -extern void e820_add_region(u64 start, u64 size, int type); + +extern void e820__range_add (u64 start, u64 size, int type); +extern u64 e820__range_update(u64 start, u64 size, unsigned old_type, unsigned new_type); +extern u64 e820__range_remove(u64 start, u64 size, unsigned old_type, int checktype); + extern void e820_print_map(char *who); extern int e820__update_table(struct e820_entry *biosmap, int max_nr_map, u32 *pnr_map); -extern u64 e820_update_range(u64 start, u64 size, unsigned old_type, unsigned new_type); -extern u64 e820_remove_range(u64 start, u64 size, unsigned old_type, int checktype); extern void e820__update_table_print(void); extern void e820__setup_pci_gap(void); extern void e820__memory_setup_extended(u64 phys_addr, u32 data_len); diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 8590f4891760..31b350c6a3b1 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -1715,6 +1715,6 @@ int __acpi_release_global_lock(unsigned int *lock) void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size) { - e820_add_region(addr, size, E820_ACPI); + e820__range_add(addr, size, E820_ACPI); e820__update_table_print(); } diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c index d027858a306e..883485684435 100644 --- a/arch/x86/kernel/aperture_64.c +++ b/arch/x86/kernel/aperture_64.c @@ -311,7 +311,7 @@ void __init early_gart_iommu_check(void) /* reserve it, so we can reuse it in second kernel */ pr_info("e820: reserve [mem %#010Lx-%#010Lx] for GART\n", aper_base, aper_base + aper_size - 1); - e820_add_region(aper_base, aper_size, E820_RESERVED); + e820__range_add(aper_base, aper_size, E820_RESERVED); e820__update_table_print(); } } diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c index e201401a7ced..244aaa988ecd 100644 --- a/arch/x86/kernel/cpu/mtrr/cleanup.c +++ b/arch/x86/kernel/cpu/mtrr/cleanup.c @@ -860,7 +860,7 @@ real_trim_memory(unsigned long start_pfn, unsigned long limit_pfn) trim_size <<= PAGE_SHIFT; trim_size -= trim_start; - return e820_update_range(trim_start, trim_size, E820_RAM, E820_RESERVED); + return e820__range_update(trim_start, trim_size, E820_RAM, E820_RESERVED); } /** diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index cb25c7248656..f91901ab9263 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -125,7 +125,7 @@ int __init e820__mapped_all(u64 start, u64 end, unsigned type) /* * Add a memory region to the kernel E820 map. */ -static void __init __e820_add_region(struct e820_table *table, u64 start, u64 size, int type) +static void __init __e820__range_add(struct e820_table *table, u64 start, u64 size, int type) { int x = table->nr_entries; @@ -140,9 +140,9 @@ static void __init __e820_add_region(struct e820_table *table, u64 start, u64 si table->nr_entries++; } -void __init e820_add_region(u64 start, u64 size, int type) +void __init e820__range_add(u64 start, u64 size, int type) { - __e820_add_region(e820_table, start, size, type); + __e820__range_add(e820_table, start, size, type); } static void __init e820_print_type(u32 type) @@ -380,7 +380,7 @@ static int __init __append_e820_table(struct e820_entry *biosmap, int nr_map) if (start > end && likely(size)) return -1; - e820_add_region(start, size, type); + e820__range_add(start, size, type); biosmap++; nr_map--; @@ -407,7 +407,7 @@ static int __init append_e820_table(struct e820_entry *biosmap, int nr_map) } static u64 __init -__e820_update_range(struct e820_table *table, u64 start, u64 size, unsigned old_type, unsigned new_type) +__e820__range_update(struct e820_table *table, u64 start, u64 size, unsigned old_type, unsigned new_type) { u64 end; unsigned int i; @@ -444,8 +444,8 @@ __e820_update_range(struct e820_table *table, u64 start, u64 size, unsigned old_ /* New range is completely covered? */ if (entry->addr < start && entry_end > end) { - __e820_add_region(table, start, size, new_type); - __e820_add_region(table, end, entry_end - end, entry->type); + __e820__range_add(table, start, size, new_type); + __e820__range_add(table, end, entry_end - end, entry->type); entry->size = start - entry->addr; real_updated_size += size; continue; @@ -457,7 +457,7 @@ __e820_update_range(struct e820_table *table, u64 start, u64 size, unsigned old_ if (final_start >= final_end) continue; - __e820_add_region(table, final_start, final_end - final_start, new_type); + __e820__range_add(table, final_start, final_end - final_start, new_type); real_updated_size += final_end - final_start; @@ -474,18 +474,18 @@ __e820_update_range(struct e820_table *table, u64 start, u64 size, unsigned old_ return real_updated_size; } -u64 __init e820_update_range(u64 start, u64 size, unsigned old_type, unsigned new_type) +u64 __init e820__range_update(u64 start, u64 size, unsigned old_type, unsigned new_type) { - return __e820_update_range(e820_table, start, size, old_type, new_type); + return __e820__range_update(e820_table, start, size, old_type, new_type); } -static u64 __init e820_update_range_firmware(u64 start, u64 size, unsigned old_type, unsigned new_type) +static u64 __init e820__range_update_firmware(u64 start, u64 size, unsigned old_type, unsigned new_type) { - return __e820_update_range(e820_table_firmware, start, size, old_type, new_type); + return __e820__range_update(e820_table_firmware, start, size, old_type, new_type); } /* Remove a range of memory from the E820 table: */ -u64 __init e820_remove_range(u64 start, u64 size, unsigned old_type, int checktype) +u64 __init e820__range_remove(u64 start, u64 size, unsigned old_type, int checktype) { int i; u64 end; @@ -519,7 +519,7 @@ u64 __init e820_remove_range(u64 start, u64 size, unsigned old_type, int checkty /* Is the new range completely covered? */ if (entry->addr < start && entry_end > end) { - e820_add_region(end, entry_end - end, entry->type); + e820__range_add(end, entry_end - end, entry->type); entry->size = start - entry->addr; real_removed_size += size; continue; @@ -747,7 +747,7 @@ u64 __init e820__memblock_alloc_reserved(u64 size, u64 align) addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE); if (addr) { - e820_update_range_firmware(addr, size, E820_RAM, E820_RESERVED); + e820__range_update_firmware(addr, size, E820_RAM, E820_RESERVED); pr_info("e820: update e820_table_firmware for e820__memblock_alloc_reserved()\n"); e820__update_table_firmware(); } @@ -846,7 +846,7 @@ static int __init parse_memopt(char *p) if (mem_size == 0) return -EINVAL; - e820_remove_range(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); + e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); return 0; } @@ -882,18 +882,18 @@ static int __init parse_memmap_one(char *p) userdef = 1; if (*p == '@') { start_at = memparse(p+1, &p); - e820_add_region(start_at, mem_size, E820_RAM); + e820__range_add(start_at, mem_size, E820_RAM); } else if (*p == '#') { start_at = memparse(p+1, &p); - e820_add_region(start_at, mem_size, E820_ACPI); + e820__range_add(start_at, mem_size, E820_ACPI); } else if (*p == '$') { start_at = memparse(p+1, &p); - e820_add_region(start_at, mem_size, E820_RESERVED); + e820__range_add(start_at, mem_size, E820_RESERVED); } else if (*p == '!') { start_at = memparse(p+1, &p); - e820_add_region(start_at, mem_size, E820_PRAM); + e820__range_add(start_at, mem_size, E820_PRAM); } else { - e820_remove_range(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); + e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); } return *p == '\0' ? 0 : -EINVAL; @@ -926,7 +926,7 @@ void __init e820_reserve_setup_data(void) while (pa_data) { data = early_memremap(pa_data, sizeof(*data)); - e820_update_range(pa_data, sizeof(*data)+data->len, E820_RAM, E820_RESERVED_KERN); + e820__range_update(pa_data, sizeof(*data)+data->len, E820_RAM, E820_RESERVED_KERN); pa_data = data->next; early_memunmap(data, sizeof(*data)); } @@ -1146,8 +1146,8 @@ char *__init e820__memory_setup_default(void) } e820_table->nr_entries = 0; - e820_add_region(0, LOWMEMSIZE(), E820_RAM); - e820_add_region(HIGH_MEMORY, mem_size << 10, E820_RAM); + e820__range_add(0, LOWMEMSIZE(), E820_RAM); + e820__range_add(HIGH_MEMORY, mem_size << 10, E820_RAM); } return who; diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c index 66722f447401..81a10ab15be9 100644 --- a/arch/x86/kernel/early-quirks.c +++ b/arch/x86/kernel/early-quirks.c @@ -546,7 +546,7 @@ intel_graphics_stolen(int num, int slot, int func, &base, &end); /* Mark this space as reserved */ - e820_add_region(base, size, E820_RESERVED); + e820__range_add(base, size, E820_RESERVED); e820__update_table(e820_table->entries, ARRAY_SIZE(e820_table->entries), &e820_table->nr_entries); } diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 0fd7c0ef2716..2449df3c0044 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -731,14 +731,14 @@ static void __init trim_bios_range(void) * since some BIOSes are known to corrupt low memory. See the * Kconfig help text for X86_RESERVE_LOW. */ - e820_update_range(0, PAGE_SIZE, E820_RAM, E820_RESERVED); + e820__range_update(0, PAGE_SIZE, E820_RAM, E820_RESERVED); /* * special case: Some BIOSen report the PC BIOS * area (640->1Mb) as ram even though it is not. * take them out. */ - e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1); + e820__range_remove(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1); e820__update_table(e820_table->entries, ARRAY_SIZE(e820_table->entries), &e820_table->nr_entries); } @@ -760,8 +760,8 @@ static void __init e820_add_kernel_range(void) return; pr_warn(".text .data .bss are not marked as E820_RAM!\n"); - e820_remove_range(start, size, E820_RAM, 0); - e820_add_region(start, size, E820_RAM); + e820__range_remove(start, size, E820_RAM, 0); + e820__range_add(start, size, E820_RAM); } static unsigned reserve_low = CONFIG_X86_RESERVE_LOW << 10; @@ -1031,7 +1031,7 @@ void __init setup_arch(char **cmdline_p) trim_bios_range(); #ifdef CONFIG_X86_32 if (ppro_with_ram_bug()) { - e820_update_range(0x70000000ULL, 0x40000ULL, E820_RAM, + e820__range_update(0x70000000ULL, 0x40000ULL, E820_RAM, E820_RESERVED); e820__update_table(e820_table->entries, ARRAY_SIZE(e820_table->entries), &e820_table->nr_entries); printk(KERN_INFO "fixed physical RAM map:\n"); diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index fc42e9604562..7aa633686295 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c @@ -1178,7 +1178,7 @@ static __init char *lguest_memory_setup(void) * The Linux bootloader header contains an "e820" memory map: the * Launcher populated the first entry with our memory limit. */ - e820_add_region(boot_params.e820_table[0].addr, + e820__range_add(boot_params.e820_table[0].addr, boot_params.e820_table[0].size, boot_params.e820_table[0].type); diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 3a8f11ef6bfe..d97c05ee9664 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -165,7 +165,7 @@ static void __init do_add_efi_memmap(void) e820_type = E820_RESERVED; break; } - e820_add_region(start, size, e820_type); + e820__range_add(start, size, e820_type); } e820__update_table(e820_table->entries, ARRAY_SIZE(e820_table->entries), &e820_table->nr_entries); } diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index c2f8e4ab55bd..a634723e660f 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -596,7 +596,7 @@ static void __init xen_align_and_add_e820_region(phys_addr_t start, end &= ~((phys_addr_t)PAGE_SIZE - 1); } - e820_add_region(start, end - start, type); + e820__range_add(start, end - start, type); } static void __init xen_ignore_unusable(void) @@ -858,7 +858,7 @@ char * __init xen_memory_setup(void) * reserve ISA memory anyway because too many things poke * about in there. */ - e820_add_region(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS, + e820__range_add(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS, E820_RESERVED); e820__update_table(e820_table->entries, ARRAY_SIZE(e820_table->entries), &e820_table->nr_entries); @@ -936,7 +936,7 @@ char * __init xen_auto_xlated_memory_setup(void) &xen_e820_table_entries); for (i = 0; i < xen_e820_table_entries; i++) - e820_add_region(xen_e820_table[i].addr, xen_e820_table[i].size, + e820__range_add(xen_e820_table[i].addr, xen_e820_table[i].size, xen_e820_table[i].type); /* Remove p2m info, it is not needed. */ diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c index 2604189d6cd1..9b9ac04593fb 100644 --- a/drivers/acpi/tables.c +++ b/drivers/acpi/tables.c @@ -556,7 +556,7 @@ void __init acpi_table_upgrade(void) * But it's not enough on X86 because ioremap will * complain later (used by acpi_os_map_memory) that the pages * that should get mapped are not marked "reserved". - * Both memblock_reserve and e820_add_region (via arch_reserve_mem_area) + * Both memblock_reserve and e820__range_add (via arch_reserve_mem_area) * works fine. */ memblock_reserve(acpi_tables_addr, all_tables_size); -- 2.39.5