[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aAfG0fSVFVNciAqi@smile.fi.intel.com>
Date: Tue, 22 Apr 2025 19:41:53 +0300
From: Andy Shevchenko <andy@...nel.org>
To: Ingo Molnar <mingo@...nel.org>
Cc: linux-kernel@...r.kernel.org, Arnd Bergmann <arnd@...nel.org>,
Borislav Petkov <bp@...en8.de>, Juergen Gross <jgross@...e.com>,
"H . Peter Anvin" <hpa@...or.com>,
Kees Cook <keescook@...omium.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Mike Rapoport <rppt@...nel.org>,
Paul Menzel <pmenzel@...gen.mpg.de>,
Peter Zijlstra <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
David Woodhouse <dwmw@...zon.co.uk>
Subject: Re: [PATCH 27/29] x86/boot/e820: Simplify the e820__range_remove()
API
On Mon, Apr 21, 2025 at 08:52:07PM +0200, Ingo Molnar wrote:
> 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%
> 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 old_type, bool check_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);
Wondering if are going to get rid of 'extern' for the functions...
--
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists