[Bug 3987] New: Adds a new memory allocation boot service GetMemoryMapEx that carries a memory feature support bitmap.


bugzilla-daemon@...
 

https://bugzilla.tianocore.org/show_bug.cgi?id=3987

Bug ID: 3987
Summary: Adds a new memory allocation boot service
GetMemoryMapEx that carries a memory feature support
bitmap.
Product: EDK2 Code First
Version: Current
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: Lowest
Component: Specification Update
Assignee: unassigned@...
Reporter: dionnaglaze@...
CC: edk2+bugs+int+994+563148131503455288@groups.io
EDK II Code First UEFI Specification
industry standard
specifications:

# Title: GetMemoryMapEx

# Status: Draft

# Document: UEFI Specification Version 2.10

# License

SPDX-License-Identifier: CC-BY-4.0

# Submitter: [TianoCore Community](https://www.tianocore.org)

# Summary of the change

Adds a new memory allocation boot service GetMemoryMapEx that carries a memory
feature support bitmap.

# Benefits of the change

The addition of unaccepted memory in v2.9 makes the assumption that support of
a technology (e.g., Intel TDX, AMD SEV-SNP) is paired with support of
unaccepted memory in the guest OS. This is not the case. Linux has support for
SEV-SNP without support for accepting unaccepted memory. By adding this boot
service, the guest OS can inform the UEFI whether it has support for unaccepted
memory or not so that in the case that unaccepted memory is not supported, the
UEFI can accept all memory and classify unaccepted memory as system memory
before returning a memory map.

# Impact of the change

Virtual machines that run SEV-SNP will enjoy the benefits of a faster boot,
since accepting all memory before booting the guest OS can take a significant
amount of time for VMs with a large memory footprint.

# Detailed description of the change [normative updates]

Addition to end of Section 4.4 EFI Boot services table

EFI_GET_MEMORY_MAP_EX GetMemoryMapEx; // UEFI 2.10+

Addition to Section 7.2

EFI_BOOT_SERVICES.GetMemoryMapEx()

Summary
Returns the current memory map subject to feature support.

Prototype

typedef EFI_STATUS (EFIAPI *EFI_GET_MEMORY_MAP_EX) (
IN OUT UINTN *MemoryMapSize,
IN EFI_MEMORY_MAP_FEATURES_TYPE *MemoryMapFeatures,
OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
OUT UINTN *MapKey,
OUT UINTN *DescriptorSize,
OUT UINT32 *DescriptorVersion
);

Parameters

MemoryMapSize

A pointer to the size, in bytes, of the MemoryMap buffer. On input, this is the
size of the buffer allocated by the caller. On output, it is the size of the
buffer returned by the firmware if the buffer was large enough, or the size of
the buffer needed to contain the map if the buffer was too small.

MemoryMapFeatures

A pointer to the description of the caller's support for particular memory
features. The description is a sized struct to permit future extension. If
NULL, then all features are considered supported. See “Related Definitions.”

MemoryMap

A pointer to the buffer in which firmware places the current memory map. The
map is an array of EFI_MEMORY_DESCRIPTORs, which is defined in the
GetMemoryMap() function description.

MapKey

A pointer to the location in which firmware returns the key for the current
memory map. DescriptorSize A pointer to the location in which firmware returns
the size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR.

DescriptorVersion

A pointer to the location in which firmware returns the version number
associated with the EFI_MEMORY_DESCRIPTOR. See “Related Definitions.”

EFI_SUCCESS The requested memory pages were freed.
EFI_NOT_FOUND The requested memory pages were not allocated with
AllocatePages(). EFI_INVALID_PARAMETER Memory is not a page-aligned address or
Pages is invalid.

Related Definitions

//*******************************************************
//EFI_MEMORY_MAP_FEATURES_TYPE
//*******************************************************
typedef struct {
UINT32 Size;
UINT64 FeatureBitmap0;
} EFI_MEMORY_MAP_FEATURES_TYPE;

//*******************************************************
// Acceptable values for FeatureBitmap0 in EFI_MEMORY_MAP_FEATURES_TYPE
//*******************************************************
#define EFI_MEMORY_MAP_FEATURE0_UNACCEPTED_MEMORY 1

Size

The size of this struct. If less than the size of the struct, then the
remaining data are defined as 0. If larger than the size of the struct, then
all data beyond is considered unsupported optional feature data and is defined
as 0.

FeatureBitmap0

A bitmap of features that the caller supports. Must be a bitwise OR of
EFI_MEMORY_MAP_FEATURE0_* values.

--
You are receiving this mail because:
You are on the CC list for the bug.