lkml.org 
[lkml]   [2023]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [RFC PATCH V4 10/17] x86/hyperv: Add smp support for sev-snp guest
From
On 4/12/2023 10:59 PM, Michael Kelley (LINUX) wrote:
>> #ifdef CONFIG_AMD_MEM_ENCRYPT
>>
>> #define GHCB_USAGE_HYPERV_CALL 1
>>
>> +static u8 ap_start_input_arg[PAGE_SIZE] __bss_decrypted __aligned(PAGE_SIZE);
>> +static u8 ap_start_stack[PAGE_SIZE] __aligned(PAGE_SIZE);
> Just a question: ap_start_stack is a static variable that gets used as the
> starting stack for every AP. So obviously, once each AP is started, we must
> be sure that the AP moves off the ap_start_stack before the next AP is
> started. How is that synchronization done? I see that do_boot_cpu() is
> where the wakeup_secondary_cpu() function is called. Then there's
> some waiting until the AP completes "initial initialization" per the
> comment in the code. Is there where we know that the AP is no
> longer using ap_start_stack?
>

Hi Micahel:
secondary_startup_64_no_verify() in the head_64.S initializes
a boot time stack to replace the old stack. It's very begining stage of
starting AP. The initial_stack was initialized with idle->thread.sp in
the do_boot_cpu(). The AP is started one by one in current code and so
It's safe to reuse the stack for all APs to boot up.

278 /*
279 * Setup a boot time stack - Any secondary CPU will have lost
its stack
280 * by now because the cr3-switch above unmaps the real-mode stack
281 */
282 movq initial_stack(%rip), %rsp
283

\
 
 \ /
  Last update: 2023-04-14 18:22    [W:0.408 / U:0.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site