[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 4/4] x86/microcode: Prevent attempting updates if DIS_MCU_LOAD is set
On Mon, Jun 12, 2023 at 07:54:00PM +0100, Andrew Cooper wrote: > On 05/06/2023 6:08 pm, Alejandro Vallejo wrote: > > diff --git a/xen/arch/x86/cpu/microcode/core.c > > b/xen/arch/x86/cpu/microcode/core.c > > index 4f60d96d98..a4c123118b 100644 > > --- a/xen/arch/x86/cpu/microcode/core.c > > +++ b/xen/arch/x86/cpu/microcode/core.c > > @@ -871,6 +885,15 @@ int __init early_microcode_init(unsigned long > > *module_map, > > * present. > > */ > > ucode_ops = intel_ucode_ops; > > + > > + /* > > + * In the case where microcode updates are blocked by the > > + * DIS_MCU_LOAD bit we can still read the microcode version even if > > + * we can't change it. > > + */ > > + if ( !this_cpu_can_install_update() ) > > + ucode_ops = (struct microcode_ops){ .collect_cpu_info = > > + intel_ucode_ops.collect_cpu_info }; > > I don't see how this (the logic in this_cpu_can_install_update()) can > work, as ... > > > break; > > } > > > > @@ -900,6 +923,10 @@ int __init early_microcode_init(unsigned long > > *module_map, > > if ( ucode_mod.mod_end || ucode_blob.size ) > > rc = early_microcode_update_cpu(); > > > > + /* > > + * We just updated microcode so we must reload the boot_cpu_data bits > > + * we read before because they might be stale after the updata. > > + */ > > early_read_cpuid_7d0(); > > > > /* > > ... MSR_ARCH_CAPS is read out-of-context down here. Seeing how the minimal CPU state is read in early_cpu_init() I'll stash the read to MSR_ARCH_CAPS there too. Then it's a matter of reloading potentially changing leafs/MSRs after the update, which is a lot clearer rather than adding reads/writes ad-hoc elsewhere. Alejandro
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |