Re: [PATCHv4] x86/trampoline: Bypass compat mode in trampoline_start64() if not needed

From: Kirill A. Shutemov
Date: Wed Jan 31 2024 - 08:15:29 EST


On Fri, Jan 26, 2024 at 12:01:01PM +0200, Kirill A. Shutemov wrote:
> The trampoline_start64() vector is used when a secondary CPU starts in
> 64-bit mode. The current implementation directly enters compatibility
> mode. It is necessary to disable paging and re-enable it in the correct
> paging mode: either 4- or 5-level, depending on the configuration.
>
> The X86S[1] ISA does not support compatibility mode in ring 0, and
> paging cannot be disabled.
>
> The trampoline_start64() function is reworked to only enter compatibility
> mode if it is necessary to change the paging mode. If the CPU is already
> in the desired paging mode, it will proceed in long mode.
>
> This change will allow a secondary CPU to boot on an X86S machine as
> long as the CPU is already in the correct paging mode.
>
> In the future, there will be a mechanism to switch between paging modes
> without disabling paging.
>
> [1] https://www.intel.com/content/www/us/en/developer/articles/technical/envisioning-future-simplified-architecture.html
>
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
> Reviewed-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> Reviewed-by: Kai Huang <kai.huang@xxxxxxxxx>
> Cc: Sean Christopherson <seanjc@xxxxxxxxxx>

Any feedback?

--
Kiryl Shutsemau / Kirill A. Shutemov