| 
    
 [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  |