[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |