mirror of https://github.com/acidanthera/audk.git
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:
parent
7132df94ac
commit
b4394cca2d
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue