Messages in this thread | | | Date | Wed, 2 Feb 2022 16:32:09 -0800 | From | Josh Poimboeuf <> | Subject | Re: [PATCHv2 01/29] x86/tdx: Detect running as a TDX guest in early boot |
| |
On Wed, Feb 02, 2022 at 02:14:59AM +0300, Kirill A. Shutemov wrote: > On Tue, Feb 01, 2022 at 08:29:55PM +0100, Thomas Gleixner wrote: > > Kirill, > > > > On Mon, Jan 24 2022 at 18:01, Kirill A. Shutemov wrote: > > > > Just a nitpick... > > > > > +static bool tdx_guest_detected __ro_after_init; > > > + > > > +bool is_tdx_guest(void) > > > +{ > > > + return tdx_guest_detected; > > > +} > > > + > > > +void __init tdx_early_init(void) > > > +{ > > > + u32 eax, sig[3]; > > > + > > > + cpuid_count(TDX_CPUID_LEAF_ID, 0, &eax, &sig[0], &sig[2], &sig[1]); > > > + > > > + if (memcmp(TDX_IDENT, sig, 12)) > > > + return; > > > + > > > + tdx_guest_detected = true; > > > + > > > + setup_force_cpu_cap(X86_FEATURE_TDX_GUEST); > > > > So with that we have two ways to detect a TDX guest: > > > > - tdx_guest_detected > > > > - X86_FEATURE_TDX_GUEST > > > > Shouldn't X86_FEATURE_TDX_GUEST be good enough? > > Right. We have only 3 callers of is_tdx_guest() in cc_platform.c > I will replace them with cpu_feature_enabled(X86_FEATURE_TDX_GUEST).
I had the same review comment before. I was told that cc_platform_has() was called before caps have been set up properly, so caps can't be relied upon this early.
I'm not really convinced that's true. Yes, early_identify_cpu() -- which runs after tdx_early_init() -- clears all boot_cpu_data's capability bits to zero [*].
But shortly after that, early_identify_cpu() restores any "forced" caps with a call to get_cpu_cap() -> apply_forced_caps().
So as far as I can tell, while it's subtle, it should work. However, it should be tested carefully ;-)
[ *] The memset() of boot_cpu_data seems unnecessary since it should already be cleared by the compiler when it gets placed in the .data..read_mostly section.
-- Josh
| |