On 8/24/19 4:53 AM, Borislav Petkov wrote:
>  
> +wait_for_siblings:
> +     if (__wait_for_cpus(&late_cpus_out, NSEC_PER_SEC))
> +             panic("Timeout during microcode update!\n");
> +
>       /*
> -      * Increase the wait timeout to a safe value here since we're
> -      * serializing the microcode update and that could take a while on a
> -      * large number of CPUs. And that is fine as the *actual* timeout will
> -      * be determined by the last CPU finished updating and thus cut short.
> +      * At least one thread has completed update on each core.
> +      * For others, simply call the update to make sure the
> +      * per-cpu cpuinfo can be updated with right microcode
> +      * revision.


What is the advantage of having those other threads go through
find_patch() and (in Intel case) intel_get_microcode_revision() (which
involves two MSR accesses) vs. having the master sibling update slaves'
microcode revisions? There are only two things that need to be updated,
uci->cpu_sig.rev and c->microcode.

-boris


>        */
> -     if (__wait_for_cpus(&late_cpus_out, NSEC_PER_SEC * num_online_cpus()))
> -             panic("Timeout during microcode update!\n");
> +     if (cpumask_first(topology_sibling_cpumask(cpu)) != cpu)
> +             apply_microcode_local(&err);
>  
>       return ret;
>  }

Reply via email to