[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 08/22] x86/slaunch: restore boot MTRRs after Intel TXT DRTM



On Wed, Jul 02, 2025 at 05:11:26PM +0200, Jan Beulich wrote:
> On 30.05.2025 15:17, Sergii Dmytruk wrote:
> > @@ -442,6 +444,9 @@ static uint64_t __init mtrr_top_of_ram(void)
> >      ASSERT(paddr_bits);
> >      addr_mask = ((1ULL << paddr_bits) - 1) & PAGE_MASK;
> >
> > +    if ( slaunch_active )
> > +        txt_restore_mtrrs(e820_verbose);
>
> How did you pick this call site? Besides it being unrelated to the purpose of
> the function, we may not even make it here (e.g. when "e820-mtrr-clip=no" on
> the command line). Imo this wants to go in the caller of this function,
> machine_specific_memory_setup(). Or you want to reason about this placement in
> the description.

I think the motivation behind using this location was related to
printing debug information in a fitting place.  The possible early exit
definitely ruins everything here, thanks.  Will move at least to the
caller.

> > --- a/xen/arch/x86/include/asm/intel-txt.h
> > +++ b/xen/arch/x86/include/asm/intel-txt.h
> > @@ -426,6 +426,9 @@ void txt_map_mem_regions(void);
> >  /* Marks TXT-specific memory as used to avoid its corruption. */
> >  void txt_reserve_mem_regions(void);
> >
> > +/* Restores original MTRR values saved by a bootloader before starting 
> > DRTM. */
> > +void txt_restore_mtrrs(bool e820_verbose);
>
> This parameter name is, when the header is used from e820.c, going to shadow 
> the
> static variable of the same name there. Misra objects to such. But the 
> parameter
> doesn't really have a need for having the e820_ prefix, does it?

I don't think it's possible for a parameter in a declaration to shadow
anything, but the prefix is indeed unnecessary.

> > +        for ( i = 0; i < (uint8_t)mtrr_cap; i++ )
> ...
> > +    if ( (mtrr_cap & 0xFF) != intel_info->saved_bsp_mtrrs.mtrr_vcnt )
>
> Seeing this and ...
>
> > +    {
> > +        printk("Bootloader saved %ld MTRR values, but there should be 
> > %ld\n",
> > +               intel_info->saved_bsp_mtrrs.mtrr_vcnt, mtrr_cap & 0xFF);
> > +        /* Choose the smaller one to be on the safe side. */
> > +        mtrr_cap = (mtrr_cap & 0xFF) > 
> > intel_info->saved_bsp_mtrrs.mtrr_vcnt ?
>
> ... this vs ...
>
> > +                   intel_info->saved_bsp_mtrrs.mtrr_vcnt : mtrr_cap;
> > +    }
> > +
> > +    def_type = intel_info->saved_bsp_mtrrs.default_mem_type;
> > +    pausing_state = mtrr_pause_caching();
> > +
> > +    for ( i = 0; i < (uint8_t)mtrr_cap; i++ )
>
> ... this (and others): Please be consistent in how you access the same piece
> of data.

Will make it consistent.

> > +    {
> > +        base = intel_info->saved_bsp_mtrrs.mtrr_pair[i].mtrr_physbase;
> > +        mask = intel_info->saved_bsp_mtrrs.mtrr_pair[i].mtrr_physmask;
> > +        wrmsrl(MSR_IA32_MTRR_PHYSBASE(i), base);
> > +        wrmsrl(MSR_IA32_MTRR_PHYSMASK(i), mask);
> > +    }
> > +
> > +    pausing_state.def_type = def_type;
> > +    mtrr_resume_caching(pausing_state);
> > +
> > +    if ( e820_verbose )
> > +    {
> > +        printk("Restored MTRRs:\n"); /* Printed by caller, 
> > mtrr_top_of_ram(). */
>
> What's the comment supposed to be telling the reader? Perhaps this is related 
> to ...
>
> > +        /* If MTRRs are not enabled or WB is not a default type, MTRRs 
> > won't be printed */
>
> ... what this comment says, but then the earlier comment is still confusing 
> (to me
> at least). This latter comment says all that's needed, I would say.
>
> Jan

That comment is why I think output was meant to nest into existing debug
output, not sure about its intended meaning though.  Will drop.

Regards



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.