|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 4/7] x86/microcode: Synchronize late microcode loading
On 26.09.2019 15:53, Chao Gao wrote:
> @@ -264,40 +336,150 @@ static int microcode_update_cpu(const struct
> microcode_patch *patch)
> return err;
> }
>
> -static long do_microcode_update(void *patch)
> +static bool wait_for_state(typeof(loading_state) state)
> {
> - unsigned int cpu;
> - int ret = microcode_update_cpu(patch);
> + typeof(loading_state) cur_state;
>
> - /* Store the patch after a successful loading */
> - if ( !ret && patch )
> + while ( (cur_state = ACCESS_ONCE(loading_state)) != state )
With ACCESS_ONCE() used here, I think ...
> {
> - spin_lock(µcode_mutex);
> - microcode_update_cache(patch);
> - spin_unlock(µcode_mutex);
> - patch = NULL;
> + if ( cur_state == LOADING_EXIT )
> + return false;
> + cpu_relax();
> }
>
> - if ( microcode_ops->end_update_percpu )
> - microcode_ops->end_update_percpu();
> + return true;
> +}
> +
> +static void set_state(unsigned int state)
> +{
> + loading_state = state;
> + smp_wmb();
... it also wants to be used here (instead of the explicit barrier).
With this (which I'd be fine to be adjusted while committing)
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |