mirror of
https://github.com/torvalds/linux.git
synced 2026-05-13 08:39:31 +02:00
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: Ingo 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
This commit is contained in:
parent
af0cf1646d
commit
157266edcc
|
|
@ -441,17 +441,22 @@ __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;
|
||||
|
||||
while (nr_entries) {
|
||||
u64 start = entry->addr;
|
||||
u64 size = entry->size;
|
||||
u64 end = start + size - 1;
|
||||
u32 type = entry->type;
|
||||
u64 size = entry->size;
|
||||
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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user