mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
Right now e820__range_remove() has two parameters to control the
E820 type of the range removed:
extern void e820__range_remove(u64 start, u64 size, enum e820_type old_type, bool check_type);
Since E820 types start at 1, zero has a natural meaning of 'no type.
Consolidate the (old_type,check_type) parameters into a single (filter_type)
parameter:
extern void e820__range_remove(u64 start, u64 size, enum e820_type filter_type);
Note that both e820__mapped_raw_any() and e820__mapped_any()
already have such semantics for their 'type' parameter, although
it's currently not used with '0' by in-kernel code.
Also, the __e820__mapped_all() internal helper already has such
semantics implemented as well, and the e820__get_entry_type() API
uses the '0' type to such effect.
This simplifies not just e820__range_remove(), and synchronizes its
use of type filters with other E820 API functions, but simplifies
usage sites as well, such as parse_memmap_one(), beyond the reduction
of the number of parameters:
- else if (from)
- e820__range_remove(start_at, mem_size, from, 1);
else
- e820__range_remove(start_at, mem_size, 0, 0);
+ e820__range_remove(start_at, mem_size, from);
The generated code gets smaller as well:
add/remove: 0/0 grow/shrink: 0/5 up/down: 0/-66 (-66)
Function old new delta
parse_memopt 112 107 -5
efi_init 1048 1039 -9
setup_arch 2719 2709 -10
e820__range_remove 283 273 -10
parse_memmap_opt 559 527 -32
Total: Before=22,675,600, After=22,675,534, chg -0.00%
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: H . Peter Anvin <hpa@zytor.com>
Cc: Andy Shevchenko <andy@kernel.org>
Cc: Arnd Bergmann <arnd@kernel.org>
Cc: David Woodhouse <dwmw@amazon.co.uk>
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-28-mingo@kernel.org
55 lines
1.9 KiB
C
55 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_E820_API_H
|
|
#define _ASM_E820_API_H
|
|
|
|
#include <asm/e820/types.h>
|
|
|
|
extern struct e820_table *e820_table;
|
|
extern struct e820_table *e820_table_kexec;
|
|
extern struct e820_table *e820_table_firmware;
|
|
|
|
extern unsigned long pci_mem_start;
|
|
|
|
extern bool e820__mapped_raw_any(u64 start, u64 end, enum e820_type type);
|
|
extern bool e820__mapped_any(u64 start, u64 end, enum e820_type type);
|
|
extern bool e820__mapped_all(u64 start, u64 end, enum e820_type type);
|
|
|
|
extern void e820__range_add (u64 start, u64 size, enum e820_type type);
|
|
extern u64 e820__range_update(u64 start, u64 size, enum e820_type old_type, enum e820_type new_type);
|
|
extern void e820__range_remove(u64 start, u64 size, enum e820_type filter_type);
|
|
extern u64 e820__range_update_table(struct e820_table *t, u64 start, u64 size, enum e820_type old_type, enum e820_type new_type);
|
|
|
|
extern int e820__update_table(struct e820_table *table);
|
|
extern void e820__update_table_print(void);
|
|
|
|
extern unsigned long e820__end_of_ram_pfn(void);
|
|
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__finish_early_params(void);
|
|
extern void e820__reserve_resources(void);
|
|
extern void e820__reserve_resources_late(void);
|
|
|
|
extern void e820__memory_setup(void);
|
|
extern void e820__memory_setup_extended(u64 phys_addr, u32 data_len);
|
|
extern char *e820__memory_setup_default(void);
|
|
extern void e820__setup_pci_gap(void);
|
|
|
|
extern void e820__reallocate_tables(void);
|
|
extern void e820__register_nosave_regions(unsigned long limit_pfn);
|
|
|
|
extern int e820__get_entry_type(u64 start, u64 end);
|
|
|
|
/*
|
|
* Returns true iff the specified range [start,end) is completely contained inside
|
|
* the ISA region.
|
|
*/
|
|
static inline bool is_ISA_range(u64 start, u64 end)
|
|
{
|
|
return start >= ISA_START_ADDRESS && end <= ISA_END_ADDRESS;
|
|
}
|
|
|
|
#endif /* _ASM_E820_API_H */
|