On Wed, Jun 16, 2021 at 08:49:12PM +0200, Joerg Roedel wrote:

>  static void sev_es_ap_hlt_loop(void)
>  {
>       struct ghcb_state state;
> +     unsigned long flags;
>       struct ghcb *ghcb;
>  
> -     ghcb = sev_es_get_ghcb(&state);
> +     local_irq_save(flags);
> +
> +     ghcb = __sev_get_ghcb(&state);
>  
>       while (true) {
>               vc_ghcb_invalidate(ghcb);
> @@ -692,7 +704,9 @@ static void sev_es_ap_hlt_loop(void)
>                       break;
>       }
>  
> -     sev_es_put_ghcb(&state);
> +     __sev_put_ghcb(&state);
> +
> +     local_irq_restore(flags);
>  }

I think this is broken, at this point RCU is quite dead on this CPU and
local_irq_save/restore include tracing and all sorts.

Also, shouldn't IRQs already be disabled by the time we get here?
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to