With this patch I observe an issue where my Linux (6.2.0-rc7) guest
recur to Bootloader menu again. I am testing this with SEV SNP (w/o
UPM). Also, guest don't have lazy memory acceptance support.


Thanks for the report. I'll try to reproduce it on our UEFI and if I'm
unable, then we'll discuss next steps.


I don't see this in our test Ubuntu 22.04 image from Canonical. Do you

Ubuntu 22.04 guest by default run 5.15 kernel? But SEV SNP got
merged in 5.19. I don't know currently how we are handling accepting
the memory on "ExitBootServices" with or w/o guest supporting SNP.


It does, but I used the Qemu kernel injection pathway in Ovmf to run a
build of 6.2.0-rc7. Our testing setup doesn't give the user a boot
menu to select a kernel, so I wasn't aware that this return to
bootmenu could happen.


This looks to me like it is entering the 'accept' path twice, and so
ExitBootServices() is failing twice, resulting in a failed boot.

The double log is expected behavior because I didn't add a check for
whether accepting all memory would be a no-op.

The "Accepting all memory" message occurs twice if the guest does not
have support for unaccepted memory following this control flow:

1. EBS
2. [...] Log "Accepting all memory"
3. Loop through all memory spaces
3a. If the memory space is unaccepted, accept it.
3b. Remove the unaccepted memory space.
3c. Add a conventional memory space back with the same range and capabilities.
4. EBS returns an error since the map key is different.
5. OS calls GetMemoryMap to get the updated key.
6. OS calls EBS with the updated key.
7. [...] Log "Accepting all memory"
8. Loop through all memory spaces
8a. There are no unaccepted memory spaces left, so nothing happens.

Seems like hitting this all the time. Can't see
EFI_GCD_MEMORY_TYPE_UNACCEPTED memory at all in the memory map.

And always hitting:
if (Desc->GcdMemoryType != EFI_GCD_MEMORY_TYPE_UNACCEPTED) {

So, no memory is getting accepted. Questions below:

- If no memory is getting accepted at all, should guest boot fail with
  below errors?
- Why unaccepted memory not being set in my setup but works fine for
  you? Does it require any other change?

Thanks,
Pankaj

9. Return successfully (one would hope)

Accepting all memory^M
Accepting all memory^M
EFI stub: ERROR: exit_boot() failed!^M
EFI stub: ERROR: efi_main() failed!^M

This now does suggest that EBS is failing twice, since after the
supposed no-op of the second log, the EFI stub's exit_boot claims
failure. I can't reproduce this part. Would you try adding a log
within the acceptance loop inside the if that checks for unaccepted
memory? I'd be curious if the loop is indeed changing the map again,
despite my claims at idempotency.




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#100086): https://edk2.groups.io/g/devel/message/100086
Mute This Topic: https://groups.io/mt/96534752/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to