mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
x86/e820: Drop obsolete E820_TYPE_RESERVED_KERN and related code
E820_TYPE_RESERVED_KERN is a relict from the ancient history that was used
to early reserve setup_data, see:
28bb223795 ("x86: move reserve_setup_data to setup.c")
Nowadays setup_data is anyway reserved in memblock and there is no point in
carrying E820_TYPE_RESERVED_KERN that behaves exactly like E820_TYPE_RAM
but only complicates the code.
A bonus for removing E820_TYPE_RESERVED_KERN is a small but measurable
speedup of 20 microseconds in init_mem_mappings() on a VM with 32GB or RAM.
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20250214090651.3331663-5-rppt@kernel.org
This commit is contained in:
committed by
Ingo Molnar
parent
d45dd0a9b2
commit
efe659ac01
@@ -29,7 +29,6 @@ extern unsigned long e820__end_of_low_ram_pfn(void);
|
||||
extern u64 e820__memblock_alloc_reserved(u64 size, u64 align);
|
||||
extern void e820__memblock_setup(void);
|
||||
|
||||
extern void e820__reserve_setup_data(void);
|
||||
extern void e820__finish_early_params(void);
|
||||
extern void e820__reserve_resources(void);
|
||||
extern void e820__reserve_resources_late(void);
|
||||
|
||||
@@ -35,15 +35,6 @@ enum e820_type {
|
||||
* marking it with the IORES_DESC_SOFT_RESERVED designation.
|
||||
*/
|
||||
E820_TYPE_SOFT_RESERVED = 0xefffffff,
|
||||
|
||||
/*
|
||||
* Reserved RAM used by the kernel itself if
|
||||
* CONFIG_INTEL_TXT=y is enabled, memory of this type
|
||||
* will be included in the S3 integrity calculation
|
||||
* and so should not include any memory that the BIOS
|
||||
* might alter over the S3 transition:
|
||||
*/
|
||||
E820_TYPE_RESERVED_KERN = 128,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -187,8 +187,7 @@ void __init e820__range_add(u64 start, u64 size, enum e820_type type)
|
||||
static void __init e820_print_type(enum e820_type type)
|
||||
{
|
||||
switch (type) {
|
||||
case E820_TYPE_RAM: /* Fall through: */
|
||||
case E820_TYPE_RESERVED_KERN: pr_cont("usable"); break;
|
||||
case E820_TYPE_RAM: pr_cont("usable"); break;
|
||||
case E820_TYPE_RESERVED: pr_cont("reserved"); break;
|
||||
case E820_TYPE_SOFT_RESERVED: pr_cont("soft reserved"); break;
|
||||
case E820_TYPE_ACPI: pr_cont("ACPI data"); break;
|
||||
@@ -764,7 +763,7 @@ void __init e820__register_nosave_regions(unsigned long limit_pfn)
|
||||
|
||||
pfn = PFN_DOWN(entry->addr + entry->size);
|
||||
|
||||
if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
|
||||
if (entry->type != E820_TYPE_RAM)
|
||||
register_nosave_region(PFN_UP(entry->addr), pfn);
|
||||
|
||||
if (pfn >= limit_pfn)
|
||||
@@ -990,60 +989,6 @@ static int __init parse_memmap_opt(char *str)
|
||||
}
|
||||
early_param("memmap", parse_memmap_opt);
|
||||
|
||||
/*
|
||||
* Reserve all entries from the bootloader's extensible data nodes list,
|
||||
* because if present we are going to use it later on to fetch e820
|
||||
* entries from it:
|
||||
*/
|
||||
void __init e820__reserve_setup_data(void)
|
||||
{
|
||||
struct setup_indirect *indirect;
|
||||
struct setup_data *data;
|
||||
u64 pa_data, pa_next;
|
||||
u32 len;
|
||||
|
||||
pa_data = boot_params.hdr.setup_data;
|
||||
if (!pa_data)
|
||||
return;
|
||||
|
||||
while (pa_data) {
|
||||
data = early_memremap(pa_data, sizeof(*data));
|
||||
if (!data) {
|
||||
pr_warn("e820: failed to memremap setup_data entry\n");
|
||||
return;
|
||||
}
|
||||
|
||||
len = sizeof(*data);
|
||||
pa_next = data->next;
|
||||
|
||||
e820__range_update(pa_data, sizeof(*data)+data->len, E820_TYPE_RAM, E820_TYPE_RESERVED_KERN);
|
||||
|
||||
if (data->type == SETUP_INDIRECT) {
|
||||
len += data->len;
|
||||
early_memunmap(data, sizeof(*data));
|
||||
data = early_memremap(pa_data, len);
|
||||
if (!data) {
|
||||
pr_warn("e820: failed to memremap indirect setup_data\n");
|
||||
return;
|
||||
}
|
||||
|
||||
indirect = (struct setup_indirect *)data->data;
|
||||
|
||||
if (indirect->type != SETUP_INDIRECT)
|
||||
e820__range_update(indirect->addr, indirect->len,
|
||||
E820_TYPE_RAM, E820_TYPE_RESERVED_KERN);
|
||||
}
|
||||
|
||||
pa_data = pa_next;
|
||||
early_memunmap(data, len);
|
||||
}
|
||||
|
||||
e820__update_table(e820_table);
|
||||
|
||||
pr_info("extended physical RAM map:\n");
|
||||
e820__print_table("reserve setup_data");
|
||||
}
|
||||
|
||||
/*
|
||||
* Called after parse_early_param(), after early parameters (such as mem=)
|
||||
* have been processed, in which case we already have an E820 table filled in
|
||||
@@ -1063,7 +1008,6 @@ void __init e820__finish_early_params(void)
|
||||
static const char *__init e820_type_to_string(struct e820_entry *entry)
|
||||
{
|
||||
switch (entry->type) {
|
||||
case E820_TYPE_RESERVED_KERN: /* Fall-through: */
|
||||
case E820_TYPE_RAM: return "System RAM";
|
||||
case E820_TYPE_ACPI: return "ACPI Tables";
|
||||
case E820_TYPE_NVS: return "ACPI Non-volatile Storage";
|
||||
@@ -1079,7 +1023,6 @@ static const char *__init e820_type_to_string(struct e820_entry *entry)
|
||||
static unsigned long __init e820_type_to_iomem_type(struct e820_entry *entry)
|
||||
{
|
||||
switch (entry->type) {
|
||||
case E820_TYPE_RESERVED_KERN: /* Fall-through: */
|
||||
case E820_TYPE_RAM: return IORESOURCE_SYSTEM_RAM;
|
||||
case E820_TYPE_ACPI: /* Fall-through: */
|
||||
case E820_TYPE_NVS: /* Fall-through: */
|
||||
@@ -1101,7 +1044,6 @@ static unsigned long __init e820_type_to_iores_desc(struct e820_entry *entry)
|
||||
case E820_TYPE_PRAM: return IORES_DESC_PERSISTENT_MEMORY_LEGACY;
|
||||
case E820_TYPE_RESERVED: return IORES_DESC_RESERVED;
|
||||
case E820_TYPE_SOFT_RESERVED: return IORES_DESC_SOFT_RESERVED;
|
||||
case E820_TYPE_RESERVED_KERN: /* Fall-through: */
|
||||
case E820_TYPE_RAM: /* Fall-through: */
|
||||
case E820_TYPE_UNUSABLE: /* Fall-through: */
|
||||
default: return IORES_DESC_NONE;
|
||||
@@ -1124,7 +1066,6 @@ static bool __init do_mark_busy(enum e820_type type, struct resource *res)
|
||||
case E820_TYPE_PRAM:
|
||||
case E820_TYPE_PMEM:
|
||||
return false;
|
||||
case E820_TYPE_RESERVED_KERN:
|
||||
case E820_TYPE_RAM:
|
||||
case E820_TYPE_ACPI:
|
||||
case E820_TYPE_NVS:
|
||||
@@ -1353,7 +1294,7 @@ void __init e820__memblock_setup(void)
|
||||
if (entry->type == E820_TYPE_SOFT_RESERVED)
|
||||
memblock_reserve(entry->addr, entry->size);
|
||||
|
||||
if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
|
||||
if (entry->type != E820_TYPE_RAM)
|
||||
continue;
|
||||
|
||||
memblock_add(entry->addr, entry->size);
|
||||
|
||||
@@ -895,7 +895,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
setup_clear_cpu_cap(X86_FEATURE_APIC);
|
||||
}
|
||||
|
||||
e820__reserve_setup_data();
|
||||
e820__finish_early_params();
|
||||
|
||||
if (efi_enabled(EFI_BOOT))
|
||||
|
||||
@@ -200,8 +200,7 @@ static int tboot_setup_sleep(void)
|
||||
tboot->num_mac_regions = 0;
|
||||
|
||||
for (i = 0; i < e820_table->nr_entries; i++) {
|
||||
if ((e820_table->entries[i].type != E820_TYPE_RAM)
|
||||
&& (e820_table->entries[i].type != E820_TYPE_RESERVED_KERN))
|
||||
if (e820_table->entries[i].type != E820_TYPE_RAM)
|
||||
continue;
|
||||
|
||||
add_mac_region(e820_table->entries[i].addr, e820_table->entries[i].size);
|
||||
|
||||
@@ -468,8 +468,6 @@ phys_pte_init(pte_t *pte_page, unsigned long paddr, unsigned long paddr_end,
|
||||
if (!after_bootmem &&
|
||||
!e820__mapped_any(paddr & PAGE_MASK, paddr_next,
|
||||
E820_TYPE_RAM) &&
|
||||
!e820__mapped_any(paddr & PAGE_MASK, paddr_next,
|
||||
E820_TYPE_RESERVED_KERN) &&
|
||||
!e820__mapped_any(paddr & PAGE_MASK, paddr_next,
|
||||
E820_TYPE_ACPI))
|
||||
set_pte_init(pte, __pte(0), init);
|
||||
@@ -525,8 +523,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long paddr, unsigned long paddr_end,
|
||||
if (!after_bootmem &&
|
||||
!e820__mapped_any(paddr & PMD_MASK, paddr_next,
|
||||
E820_TYPE_RAM) &&
|
||||
!e820__mapped_any(paddr & PMD_MASK, paddr_next,
|
||||
E820_TYPE_RESERVED_KERN) &&
|
||||
!e820__mapped_any(paddr & PMD_MASK, paddr_next,
|
||||
E820_TYPE_ACPI))
|
||||
set_pmd_init(pmd, __pmd(0), init);
|
||||
@@ -614,8 +610,6 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, unsigned long paddr_end,
|
||||
if (!after_bootmem &&
|
||||
!e820__mapped_any(paddr & PUD_MASK, paddr_next,
|
||||
E820_TYPE_RAM) &&
|
||||
!e820__mapped_any(paddr & PUD_MASK, paddr_next,
|
||||
E820_TYPE_RESERVED_KERN) &&
|
||||
!e820__mapped_any(paddr & PUD_MASK, paddr_next,
|
||||
E820_TYPE_ACPI))
|
||||
set_pud_init(pud, __pud(0), init);
|
||||
@@ -703,8 +697,6 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end,
|
||||
if (!after_bootmem &&
|
||||
!e820__mapped_any(paddr & P4D_MASK, paddr_next,
|
||||
E820_TYPE_RAM) &&
|
||||
!e820__mapped_any(paddr & P4D_MASK, paddr_next,
|
||||
E820_TYPE_RESERVED_KERN) &&
|
||||
!e820__mapped_any(paddr & P4D_MASK, paddr_next,
|
||||
E820_TYPE_ACPI))
|
||||
set_p4d_init(p4d, __p4d(0), init);
|
||||
|
||||
Reference in New Issue
Block a user