A friendly ping. On Wed, Aug 14, 2024 at 12:33 AM Jacek Tomaka <jacekt@xxxxxxxxx> wrote: > > Essentially catch up with e820 related changes in the kernel. > Intel Sapphire Rappids MAX has high bandwidth memory which is > precious resource that is better not allocated by the kernel. > > Userspace later can enable soft reserved range using daxctl. > > Signed-off-by: Jacek Tomaka <jacek.tomaka@xxxxxxxxx> > --- > include/x86/x86-linux.h | 2 ++ > kexec/arch/i386/crashdump-x86.c | 7 +++++++ > kexec/arch/i386/kexec-multiboot-x86.c | 1 + > kexec/arch/i386/kexec-x86-common.c | 5 +++++ > kexec/arch/i386/x86-linux-setup.c | 3 +++ > kexec/firmware_memmap.c | 2 ++ > kexec/kexec.h | 1 + > 7 files changed, 21 insertions(+) > > diff --git a/include/x86/x86-linux.h b/include/x86/x86-linux.h > index 9646102835..fbde93df94 100644 > --- a/include/x86/x86-linux.h > +++ b/include/x86/x86-linux.h > @@ -23,6 +23,8 @@ struct e820entry { > #define E820_NVS 4 > #define E820_PMEM 7 > #define E820_PRAM 12 > +#define E820_SOFT_RESERVED 0xefffffff > + > } __attribute__((packed)); > #endif > > diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c > index a01031e570..49108b2032 100644 > --- a/kexec/arch/i386/crashdump-x86.c > +++ b/kexec/arch/i386/crashdump-x86.c > @@ -288,6 +288,10 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges, > type = RANGE_RESERVED; > } else if (memcmp(str, "Reserved\n", 9) == 0) { > type = RANGE_RESERVED; > + } else if (memcmp(str, "soft reserved\n", 14) == 0 ) { > + type = RANGE_SOFT_RESERVED; > + } else if (memcmp(str, "Soft Reserved\n", 14) == 0 ) { > + type = RANGE_SOFT_RESERVED; > } else if (memcmp(str, "GART\n", 5) == 0) { > gart_start = start; > gart_end = end; > @@ -615,6 +619,8 @@ static void cmdline_add_memmap_internal(char *cmdline, unsigned long startk, > strcat (str_mmap, "K@"); > else if (type == RANGE_RESERVED) > strcat (str_mmap, "K$"); > + else if (type == RANGE_SOFT_RESERVED) > + strcat (str_mmap, "K*"); > else if (type == RANGE_ACPI || type == RANGE_ACPI_NVS) > strcat (str_mmap, "K#"); > else if (type == RANGE_PRAM) > @@ -985,6 +991,7 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline, > if ( !( mem_range[i].type == RANGE_ACPI > || mem_range[i].type == RANGE_ACPI_NVS > || mem_range[i].type == RANGE_RESERVED > + || mem_range[i].type == RANGE_SOFT_RESERVED > || mem_range[i].type == RANGE_PMEM > || mem_range[i].type == RANGE_PRAM)) > continue; > diff --git a/kexec/arch/i386/kexec-multiboot-x86.c b/kexec/arch/i386/kexec-multiboot-x86.c > index 33c885a2fa..49d57cb5ae 100644 > --- a/kexec/arch/i386/kexec-multiboot-x86.c > +++ b/kexec/arch/i386/kexec-multiboot-x86.c > @@ -379,6 +379,7 @@ int multiboot_x86_load(int argc, char **argv, const char *buf, off_t len, > mmap[i].Type = 4; > break; > case RANGE_RESERVED: > + case RANGE_SOFT_RESERVED: > default: > mmap[i].Type = 2; /* Not RAM (reserved) */ > } > diff --git a/kexec/arch/i386/kexec-x86-common.c b/kexec/arch/i386/kexec-x86-common.c > index ffc95a9e43..116c4f4fd3 100644 > --- a/kexec/arch/i386/kexec-x86-common.c > +++ b/kexec/arch/i386/kexec-x86-common.c > @@ -99,6 +99,9 @@ static int get_memory_ranges_proc_iomem(struct memory_range **range, int *ranges > else if (strncasecmp(str, "reserved\n", 9) == 0) { > type = RANGE_RESERVED; > } > + else if (strncasecmp(str, "soft reserved\n", 9) == 0) { > + type = RANGE_SOFT_RESERVED; > + } > else if (memcmp(str, "ACPI Tables\n", 12) == 0) { > type = RANGE_ACPI; > } > @@ -170,6 +173,8 @@ unsigned xen_e820_to_kexec_type(uint32_t type) > return RANGE_PMEM; > case E820_PRAM: > return RANGE_PRAM; > + case E820_SOFT_RESERVED; > + return RANGE_SOFT_RESERVED; > case E820_RESERVED: > default: > return RANGE_RESERVED; > diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c > index 73251b9339..afc83fe729 100644 > --- a/kexec/arch/i386/x86-linux-setup.c > +++ b/kexec/arch/i386/x86-linux-setup.c > @@ -755,6 +755,9 @@ static void add_e820_map_from_mr(struct x86_linux_param_header *real_mode, > case RANGE_PRAM: > e820[i].type = E820_PRAM; > break; > + case RANGE_SOFT_RESERVED: > + e820[i].type = E820_SOFT_RESERVED; > + break; > default: > case RANGE_RESERVED: > e820[i].type = E820_RESERVED; > diff --git a/kexec/firmware_memmap.c b/kexec/firmware_memmap.c > index 457c3dc9a6..fa0c22140a 100644 > --- a/kexec/firmware_memmap.c > +++ b/kexec/firmware_memmap.c > @@ -182,6 +182,8 @@ static int parse_memmap_entry(const char *entry, struct memory_range *range) > range->type = RANGE_RESERVED; > else if (strcmp(type, "Reserved") == 0) > range->type = RANGE_RESERVED; > + else if (strcmp(type, "Soft Reserved") == 0) > + range->type = RANGE_SOFT_RESERVED; > else if (strcmp(type, "Unknown E820 type") == 0) > range->type = RANGE_RESERVED; > else if (strcmp(type, "ACPI Non-volatile Storage") == 0) > diff --git a/kexec/kexec.h b/kexec/kexec.h > index 31c323f674..dbb27a7607 100644 > --- a/kexec/kexec.h > +++ b/kexec/kexec.h > @@ -139,6 +139,7 @@ struct memory_range { > #define RANGE_UNCACHED 4 > #define RANGE_PMEM 6 > #define RANGE_PRAM 11 > +#define RANGE_SOFT_RESERVED 0xefffffff > }; > > struct memory_ranges { > -- > 2.17.0 > -- Jacek Tomaka Principal Software Engineer 76 Kings Park Road West Perth 6005 WA, Australia tel +61 8 9287 4143 jacekt@xxxxxxx www.dug.com www.dug.comwww.dug.com _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec