On 2/12/24 02:44, Kirill A. Shutemov wrote:
> +static void tdx_kexec_stop_conversion(bool crash)
> +{
> +     /* Stop new private<->shared conversions */
> +     conversion_allowed = false;
> +
> +     /*
> +      * Make sure conversion_allowed is cleared before checking
> +      * conversions_in_progress.
> +      */
> +     barrier();
> +
> +     /*
> +      * Crash kernel reaches here with interrupts disabled: can't wait for
> +      * conversions to finish.
> +      *
> +      * If race happened, just report and proceed.
> +      */
> +     if (!crash) {
> +             unsigned long timeout;
> +
> +             /*
> +              * Wait for in-flight conversions to complete.
> +              *
> +              * Do not wait more than 30 seconds.
> +              */
> +             timeout = 30 * USEC_PER_SEC;
> +             while (atomic_read(&conversions_in_progress) && timeout--)
> +                     udelay(1);
> +     }
> +
> +     if (atomic_read(&conversions_in_progress))
> +             pr_warn("Failed to finish shared<->private conversions\n");
> +}

I'd really prefer we find a way to do this with actual locks, especially
'conversion_allowed'.

This is _awfully_ close to being able to be handled by a rwsem where the
readers are the converters and tdx_kexec_stop_conversion() takes a write.



_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to