[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/ucode: Only rescan features on successful microcode load
On 20.11.2024 14:50, Andrew Cooper wrote: > On 20/11/2024 10:50 am, Jan Beulich wrote: >> On 19.11.2024 22:58, Andrew Cooper wrote: >>> There's no point rescanning if we didn't load something new. Take the >>> opportunity to make the comment a bit more concise. >>> >>> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> >> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > > Thanks. > >> >>> @@ -911,14 +915,5 @@ int __init early_microcode_init(struct boot_info *bi) >>> >>> rc = early_microcode_load(bi); >>> >>> - /* >>> - * Some CPUID leaves and MSRs are only present after microcode updates >>> - * on some processors. We take the chance here to make sure what little >>> - * state we have already probed is re-probed in order to ensure we do >>> - * not use stale values. tsx_init() in particular needs to have up to >>> - * date MSR_ARCH_CAPS. >>> - */ >>> - early_cpu_init(false); >>> - >>> return rc; >>> } >> In principle with this rc could be dropped from the function. > > Oh, so it can. I think I did so in an earlier attempt, prior to > deciding to go down the route that is partially committed. > > I'm happy to fold in the removal. The incremental diff is: > > @@ -873,7 +873,6 @@ static int __init early_microcode_load(struct > boot_info *bi) > int __init early_microcode_init(struct boot_info *bi) > { > const struct cpuinfo_x86 *c = &boot_cpu_data; > - int rc = 0; > > switch ( c->x86_vendor ) > { > @@ -913,7 +912,5 @@ int __init early_microcode_init(struct boot_info *bi) > return -ENODEV; > } > > - rc = early_microcode_load(bi); > - > - return rc; > + return early_microcode_load(bi); > } Please do. >> It's then further >> unclear why early_microcode_load() needs to be a separate function, rather >> than >> simply being inlined here (as I expect the compiler is going to do anyway). > > Both cognitive and code complexity. > > "Probe and install hooks" is separate from "try to load new ucode if we > can". > > They've now got entirely disjoint local variables, and the latter has > some non-trivial control flow in it. It's liable to get even more > complex if we try to allow CPIO in an explicitly nominated module. > > More generally, a separate function and internal return statements can > express control flow which can only be done with gotos at the outer > level, even if we fully intend the compiler to fold the two together. Fair enough. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |