Messages in this thread | | | From | Ard Biesheuvel <> | Date | Wed, 7 Feb 2024 10:38:20 +0000 | Subject | Re: [PATCH v3 05/19] x86/startup_64: Simplify CR4 handling in startup code |
| |
On Tue, 6 Feb 2024 at 18:21, Borislav Petkov <bp@alien8.de> wrote: > > On Mon, Jan 29, 2024 at 07:05:08PM +0100, Ard Biesheuvel wrote: > > From: Ard Biesheuvel <ardb@kernel.org> > > > > When executing in long mode, the CR4.PAE and CR4.LA57 control bits > > cannot be updated, > > "Long mode requires PAE to be enabled in order to use the 64-bit > page-translation data structures to translate 64-bit virtual addresses > to 52-bit physical addresses." > > which is actually already enabled at that point: > > cr4 0x20 [ PAE ] > > "5-Level paging is enabled by setting CR4[LA57]=1 when EFER[LMA]=1. > CR4[LA57] is ignored when long mode is not active (EFER[LMA]=0)." > > and if I had a 5-level guest, it would have LA57 already set too. > > So I think you mean "When paging is enabled" as dhansen correctly points > out. >
Ack.
> > and so they can simply be preserved rather than reason about whether > > or not they need to be set. CR4.PSE has no effect in long mode so it > > can be omitted. > > f4c5ca985012 ("x86_64: Show CR4.PSE on auxiliaries like on BSP") > > Please don't forget about git history before doing changes here. >
My bad - I misunderstood what is going on here.
> > CR4.PGE is used to flush the TLBs, by clearing it if it was set, and > > ... to flush TLB entries with the global bit set. > > And just like the above commit says, I think the CR4 settings across all > CPUs on the machine should be the same. So we want to keep PSE. > > Removing the CONFIG_X86_5LEVEL ifdeffery is nice, OTOH. >
Cheers.
| |