Hi,

> -----Original Message-----
> From: Xen-devel <[email protected]> On Behalf Of
> Sebastian Andrzej Siewior
> Sent: Monday, November 22, 2021 11:47 PM
> To: Longpeng (Mike, Cloud Infrastructure Service Product Dept.)
> <[email protected]>
> Cc: [email protected]; Gonglei (Arei) <[email protected]>;
> [email protected]; [email protected]; Peter Zijlstra
> <[email protected]>; Ingo Molnar <[email protected]>; Valentin
> Schneider <[email protected]>; Boris Ostrovsky
> <[email protected]>; Juergen Gross <[email protected]>; Stefano
> Stabellini <[email protected]>; Thomas Gleixner <[email protected]>;
> Ingo Molnar <[email protected]>; Borislav Petkov <[email protected]>; Dave
> Hansen <[email protected]>; H. Peter Anvin <[email protected]>
> Subject: [PATCH] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be
> brought up again.
> 
> From: "Longpeng(Mike)" <[email protected]>
> 
> A CPU will not show up in virtualized environment which includes an
> Enclave. The VM splits its resources into a primary VM and a Enclave
> VM. While the Enclave is active, the hypervisor will ignore all requests
> to bring up a CPU and this CPU will remain in CPU_UP_PREPARE state.
> The kernel will wait up to ten seconds for CPU to show up
> (do_boot_cpu()) and then rollback the hotplug state back to
> CPUHP_OFFLINE leaving the CPU state in CPU_UP_PREPARE. The CPU state is
> set back to CPUHP_TEARDOWN_CPU during the CPU_POST_DEAD stage.
> 
> After the Enclave VM terminates, the primary VM can bring up the CPU
> again.
> 
> Allow to bring up the CPU if it is in the CPU_UP_PREPARE state.
> 
> [bigeasy: Rewrite commit description.]
> 
> Signed-off-by: Longpeng(Mike) <[email protected]>
> Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
> Link: https://lore.kernel.org/r/20210901051143.2752-1-
> [email protected]
> ---
> 
> For XEN: this changes the behaviour as it allows to invoke
> cpu_initialize_context() again should it have have earlier. I *think*
> this is okay and would to bring up the CPU again should the memory
> allocation in cpu_initialize_context() fail.
> 
>  kernel/smpboot.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/kernel/smpboot.c b/kernel/smpboot.c
> index f6bc0bc8a2aab..34958d7fe2c1c 100644
> --- a/kernel/smpboot.c
> +++ b/kernel/smpboot.c
> @@ -392,6 +392,13 @@ int cpu_check_up_prepare(int cpu)
>                */
>               return -EAGAIN;
> 
> +     case CPU_UP_PREPARE:
> +             /*
> +              * Timeout while waiting for the CPU to show up. Allow to try
> +              * again later.
> +              */
> +             return 0;
> +
>       default:
> 
>               /* Should not happen.  Famous last words. */
> --
> 2.33.1
> 

Reviewed-by: Henry Wang <[email protected]>

Kind regards,

Henry

Reply via email to