UefiCpuPkg: Sort mProtectionMemRange when ReadyToLock

Sort mProtectionMemRange in InitProtectedMemRange() when
ReadyToLock.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Dun Tan 2023-05-15 18:03:48 +08:00 committed by Ray Ni
parent 7132df94ac
commit b4394cca2d
1 changed files with 32 additions and 0 deletions

View File

@ -375,6 +375,32 @@ IsAddressSplit (
return FALSE;
}
/**
Function to compare 2 MEMORY_PROTECTION_RANGE based on range base.
@param[in] Buffer1 pointer to Device Path poiner to compare
@param[in] Buffer2 pointer to second DevicePath pointer to compare
@retval 0 Buffer1 equal to Buffer2
@retval <0 Buffer1 is less than Buffer2
@retval >0 Buffer1 is greater than Buffer2
**/
INTN
EFIAPI
ProtectionRangeCompare (
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
)
{
if (((MEMORY_PROTECTION_RANGE *)Buffer1)->Range.Base > ((MEMORY_PROTECTION_RANGE *)Buffer2)->Range.Base) {
return 1;
} else if (((MEMORY_PROTECTION_RANGE *)Buffer1)->Range.Base < ((MEMORY_PROTECTION_RANGE *)Buffer2)->Range.Base) {
return -1;
}
return 0;
}
/**
Initialize the protected memory ranges and the 4KB-page mapped memory ranges.
@ -397,6 +423,7 @@ InitProtectedMemRange (
EFI_PHYSICAL_ADDRESS Base2MBAlignedAddress;
UINT64 High4KBPageSize;
UINT64 Low4KBPageSize;
MEMORY_PROTECTION_RANGE MemProtectionRange;
NumberOfDescriptors = 0;
NumberOfAddedDescriptors = mSmmCpuSmramRangeCount;
@ -533,6 +560,11 @@ InitProtectedMemRange (
mSplitMemRangeCount = NumberOfSpliteRange;
//
// Sort the mProtectionMemRange
//
QuickSort (mProtectionMemRange, mProtectionMemRangeCount, sizeof (MEMORY_PROTECTION_RANGE), (BASE_SORT_COMPARE)ProtectionRangeCompare, &MemProtectionRange);
DEBUG ((DEBUG_INFO, "SMM Profile Memory Ranges:\n"));
for (Index = 0; Index < mProtectionMemRangeCount; Index++) {
DEBUG ((DEBUG_INFO, "mProtectionMemRange[%d].Base = %lx\n", Index, mProtectionMemRange[Index].Range.Base));