|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 5/5] x86/microcode: Disable microcode update handler if DIS_MCU_UPDATE is set
On 15.06.2023 17:48, Alejandro Vallejo wrote:
> --- a/xen/arch/x86/cpu/common.c
> +++ b/xen/arch/x86/cpu/common.c
> @@ -352,6 +352,11 @@ void __init early_cpu_init(void)
> &c->x86_capability[FEATURESET_7c0],
> &c->x86_capability[FEATURESET_7d0]);
>
> + if (test_bit(X86_FEATURE_ARCH_CAPS, c->x86_capability))
> + rdmsr(MSR_ARCH_CAPABILITIES,
> + c->x86_capability[FEATURESET_m10Al],
> + c->x86_capability[FEATURESET_m10Ah]);
Is this still going to be needed if early_microcode_init() uniformly
does this, for things to be correct for tsx_init() (as pointed out
in the other patch)?
> --- a/xen/arch/x86/cpu/microcode/intel.c
> +++ b/xen/arch/x86/cpu/microcode/intel.c
> @@ -387,8 +387,22 @@ static struct microcode_patch *cf_check
> cpu_request_microcode(
>
> void __init intel_get_ucode_ops(struct microcode_ops *ops)
> {
> + uint64_t mcu_ctrl;
> +
> ops->cpu_request_microcode = cpu_request_microcode;
> ops->collect_cpu_info = collect_cpu_info;
> ops->apply_microcode = apply_microcode;
> ops->compare_patch = compare_patch;
> +
> + if ( cpu_has_mcu_ctrl )
> + {
> + rdmsrl(MSR_MCU_CONTROL, mcu_ctrl);
> + /*
> + * If DIS_MCU_LOAD is set applying microcode updates won't work. We
> + * can still query the current version and things like that, so
> + * we'll leave the other handlers in place.
> + */
> + if ( mcu_ctrl & MCU_CONTROL_DIS_MCU_LOAD )
> + ops->apply_microcode = NULL;
> + }
While this won't address Andrew's request (afaict), but only the
cf_clobber requirement, I think you want to drop removing of the struct
instances from patch 2, return pointers from the new per-vendor
functions, and simply introduce another static instance of struct
microcode_ops here, with the one hook simply left unset. This lives in
init data, so the size increase is of no major concern.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |