Commit 157266ed authored by Ingo Molnar's avatar Ingo Molnar
Browse files

x86/boot/e820: Simplify append_e820_table() and remove restriction on single-entry tables



So append_e820_table() begins with this weird condition that checks 'nr_entries':

    static int __init append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
    {
            /* Only one memory region (or negative)? Ignore it */
            if (nr_entries < 2)
                    return -1;

Firstly, 'nr_entries' has been an u32 since 2017 and cannot be negative.

Secondly, there's nothing inherently wrong with single-entry E820 maps,
especially in virtualized environments.

So remove this restriction and remove the __append_e820_table()
indirection.

Also:

 - fix/update comments
 - remove obsolete comments

This shrinks the generated code a bit as well:

   text       data        bss        dec        hex    filename
   7549      44072          0      51621       c9a5    e820.o.before
   7533      44072          0      51605       c995    e820.o.after

Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Andy Shevchenko <andy@kernel.org>
Cc: Arnd Bergmann <arnd@kernel.org>
Cc: David Woodhouse <dwmw@amazon.co.uk>
Cc: H . Peter Anvin <hpa@zytor.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Paul Menzel <pmenzel@molgen.mpg.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://patch.msgid.link/20250515120549.2820541-26-mingo@kernel.org
parent af0cf164
Loading
Loading
Loading
Loading
+11 −24
Original line number Diff line number Diff line
@@ -441,7 +441,12 @@ __init int e820__update_table(struct e820_table *table)
	return 0;
}

__init static int __append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
/*
 * Copy the BIOS E820 map into the kernel's e820_table.
 *
 * Sanity-check it while we're at it..
 */
__init static int append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
{
	struct boot_e820_entry *entry = entries;

@@ -451,7 +456,7 @@ __init static int __append_e820_table(struct boot_e820_entry *entries, u32 nr_en
		u64 end   = start + size-1;
		u32 type  = entry->type;

		/* Ignore the entry on 64-bit overflow: */
		/* Ignore the remaining entries on 64-bit overflow: */
		if (start > end && likely(size))
			return -1;

@@ -463,24 +468,6 @@ __init static int __append_e820_table(struct boot_e820_entry *entries, u32 nr_en
	return 0;
}

/*
 * Copy the BIOS E820 map into a safe place.
 *
 * Sanity-check it while we're at it..
 *
 * If we're lucky and live on a modern system, the setup code
 * will have given us a memory map that we can use to properly
 * set up memory.  If we aren't, we'll fake a memory map.
 */
__init static int append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
{
	/* Only one memory region (or negative)? Ignore it */
	if (nr_entries < 2)
		return -1;

	return __append_e820_table(entries, nr_entries);
}

__init static u64
__e820__range_update(struct e820_table *table, u64 start, u64 size, enum e820_type old_type, enum e820_type new_type)
{
@@ -754,7 +741,7 @@ __init void e820__memory_setup_extended(u64 phys_addr, u32 data_len)
	entries = sdata->len / sizeof(*extmap);
	extmap = (struct boot_e820_entry *)(sdata->data);

	__append_e820_table(extmap, entries);
	append_e820_table(extmap, entries);
	e820__update_table(e820_table);

	memcpy(e820_table_kexec, e820_table, sizeof(*e820_table_kexec));