]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/e820: Drop obsolete E820_TYPE_RESERVED_KERN and related code
authorMike Rapoport (Microsoft) <rppt@kernel.org>
Fri, 14 Feb 2025 09:06:51 +0000 (11:06 +0200)
committerIngo Molnar <mingo@kernel.org>
Fri, 21 Feb 2025 15:05:00 +0000 (16:05 +0100)
E820_TYPE_RESERVED_KERN is a relict from the ancient history that was used
to early reserve setup_data, see:

  28bb22379513 ("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
arch/x86/include/asm/e820/api.h
arch/x86/include/asm/e820/types.h
arch/x86/kernel/e820.c
arch/x86/kernel/setup.c
arch/x86/kernel/tboot.c
arch/x86/mm/init_64.c

index 2e74a7f0e93575c3aa4180dc9ad4a9728f07700d..c83645d5b2a86d4a43515340ff50230fa82690da 100644 (file)
@@ -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);
index 314f75d886d08a979dd63ebce1d150926959d202..80c4a7266629c9483ddde9b89a42ba1236fdc8d1 100644 (file)
@@ -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,
 };
 
 /*
index 8d8bd039d2ac1a0eb35932ec6514280f395db207..9fb67abc32cce96ba5daf49f4de9c4878df4f94e 100644 (file)
@@ -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);
index 6fb9a851bc197fbbb467f3092023744ec3a0407e..46d92d04b6da4bba79e47666f392baa9a3215efd 100644 (file)
@@ -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))
index 4c1bcb6053fc07d54ea8c668164fe8494745f490..46b8f1f16676e4e1c0c59fad5030f04cead5dd3d 100644 (file)
@@ -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);
index 01ea7c6df3036bd185cdb3f54ddf244b79cbce8c..519aa53114facdd2bb1ecd227e750c1e52954162 100644 (file)
@@ -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);