Re: Does earlyprintk=ttyS0 work for an AMD SNP guest on KVM?

From: Tom Lendacky
Date: Fri Mar 17 2023 - 14:07:40 EST


On 2/17/23 20:54, Dexuan Cui wrote:
From: Jeremi Piotrowski <jpiotrowski@xxxxxxxxxxxxxxxxxxx>
Sent: Friday, February 17, 2023 4:51 AM
To: Dexuan Cui <decui@xxxxxxxxxxxxx>
[...]
The comment before the first branch says:
On 4-level paging, p4d_offset(top_level_pgt, 0) is equal to 'top_level_pgt'.

IIUC this means 'top_level_pgt' is equal to '_pgtable'? i.e. without
CONFIG_RANDOMIZE_BASE, pgt_data.pgt_buf_size should be 0.

Not sure why it's not getting into the first branch for you.

Sorry, I got two things confused here. The relevant part of the comment is this:
"If we came here via startup_32(), cr3 will be _pgtable already".

Booting a (non-SNP) guest via BIOS I end up in the first branch. Upstream SNP
support requires OVMF (UEFI) so we'll always reach the kernel in 64-bit mode
(startup_64?), and end up in the second branch.

Jeremi

Here I'm running a C-bit mode SNP guest on Hyper-V via "direct-boot" (i.e.
I run Set-VMFirmware to tell Hyper-V to boot the kernel directly without
UEFI). Looks like arch/x86/boot/compressed/head_64.S: startup_32 runs
first and calls startup_64 later (?) This might explain why I'm getting into
the first branch, which I hope could be fixed by someone...

It sounds like there aren't enough pages available to satisfy the page split in order to make the GHCB shared. Have you tried changing BOOT_INIT_PGT_SIZE to increase it by 1 page. Splitting the page will require an additional page table, I think that is all that would be needed.

Thanks,
Tom