StandaloneMmPkg/MemLib: remove unnecessary check

Remove unnecessary check in API MmIsBufferOutsideMmValid of
StandaloneMmMemLib.

The API is used to check if a input buffer is outside MMRAM and
inside a valid non-MMRAM range. Previously, the API only checks
if the input buffer is
 overlapped with MMRAM range. In the last
commit, we add logic to check if the input buffer is inside valid
non-MMRAM 
ranges reported by the resource HOB. Since the resource
HOB only covers valid non-MMRAM ranges, we doesn't need to check
if the input buffer is inside the MMRAM anymore.

Signed-off-by: Dun Tan <dun.tan@intel.com>
This commit is contained in:
Dun Tan 2024-09-20 15:09:01 +08:00 committed by mergify[bot]
parent da8fd23dbb
commit 836942fbad
5 changed files with 1 additions and 162 deletions

View File

@ -32,34 +32,6 @@ MmMemLibCalculateMaximumSupportAddress (
DEBUG ((DEBUG_INFO, "mMmMemLibInternalMaximumSupportAddress = 0x%lx\n", mMmMemLibInternalMaximumSupportAddress));
}
/**
Initialize cached Mmram Ranges from HOB.
@retval EFI_UNSUPPORTED The routine is unable to extract MMRAM information.
@retval EFI_SUCCESS MmRanges are populated successfully.
**/
EFI_STATUS
MmMemLibInternalPopulateMmramRanges (
VOID
)
{
// Not implemented for AARCH64.
return EFI_SUCCESS;
}
/**
Deinitialize cached Mmram Ranges.
**/
VOID
MmMemLibInternalFreeMmramRanges (
VOID
)
{
// Not implemented for AARCH64.
}
/**
Initialize valid non-Mmram Ranges from Resource HOB.

View File

@ -15,9 +15,6 @@
#include "StandaloneMmMemLibInternal.h"
EFI_MMRAM_DESCRIPTOR *mMmMemLibInternalMmramRanges;
UINTN mMmMemLibInternalMmramCount;
//
// Maximum support address used to check input buffer
//
@ -39,8 +36,6 @@ MmIsBufferOutsideMmValid (
IN UINT64 Length
)
{
UINTN Index;
//
// Check override.
// NOTE: (B:0->L:4G) is invalid for IA32, but (B:1->L:4G-1)/(B:4G-1->L:1) is valid.
@ -62,28 +57,6 @@ MmIsBufferOutsideMmValid (
return FALSE;
}
for (Index = 0; Index < mMmMemLibInternalMmramCount; Index++) {
if (((Buffer >= mMmMemLibInternalMmramRanges[Index].CpuStart) &&
(Buffer < mMmMemLibInternalMmramRanges[Index].CpuStart + mMmMemLibInternalMmramRanges[Index].PhysicalSize)) ||
((mMmMemLibInternalMmramRanges[Index].CpuStart >= Buffer) &&
(mMmMemLibInternalMmramRanges[Index].CpuStart < Buffer + Length)))
{
DEBUG ((
DEBUG_ERROR,
"MmIsBufferOutsideMmValid: Overlap: Buffer (0x%lx) - Length (0x%lx), ",
Buffer,
Length
));
DEBUG ((
DEBUG_ERROR,
"CpuStart (0x%lx) - PhysicalSize (0x%lx)\n",
mMmMemLibInternalMmramRanges[Index].CpuStart,
mMmMemLibInternalMmramRanges[Index].PhysicalSize
));
return FALSE;
}
}
return MmMemLibIsValidNonMmramRange (Buffer, Length);
}
@ -254,8 +227,6 @@ MemLibConstructor (
IN EFI_MM_SYSTEM_TABLE *MmSystemTable
)
{
EFI_STATUS Status;
//
// Calculate and save maximum support address
//
@ -266,12 +237,7 @@ MemLibConstructor (
//
MmMemLibInitializeValidNonMmramRanges ();
//
// Initialize cached Mmram Ranges from HOB.
//
Status = MmMemLibInternalPopulateMmramRanges ();
return Status;
return EFI_SUCCESS;
}
/**
@ -290,11 +256,6 @@ MemLibDestructor (
IN EFI_MM_SYSTEM_TABLE *MmSystemTable
)
{
//
// Deinitialize cached Mmram Ranges.
//
MmMemLibInternalFreeMmramRanges ();
//
// Deinitialize cached non-Mmram Ranges.
//

View File

@ -50,7 +50,3 @@
DebugLib
HobLib
MemoryAllocationLib
[Guids]
gEfiMmPeiMmramMemoryReserveGuid ## SOMETIMES_CONSUMES ## HOB
gEfiSmmSmramMemoryGuid ## SOMETIMES_CONSUMES ## HOB

View File

@ -24,27 +24,6 @@ MmMemLibCalculateMaximumSupportAddress (
VOID
);
/**
Initialize cached Mmram Ranges from HOB.
@retval EFI_UNSUPPORTED The routine is unable to extract MMRAM information.
@retval EFI_SUCCESS MmRanges are populated successfully.
**/
EFI_STATUS
MmMemLibInternalPopulateMmramRanges (
VOID
);
/**
Deinitialize cached Mmram Ranges.
**/
VOID
MmMemLibInternalFreeMmramRanges (
VOID
);
/**
Initialize valid non-Mmram Ranges from Resource HOB.

View File

@ -18,8 +18,6 @@
#include <Library/MemoryAllocationLib.h>
#include <Library/HobLib.h>
#include <Guid/MmramMemoryReserve.h>
typedef struct {
EFI_PHYSICAL_ADDRESS Base;
UINT64 Length;
@ -32,8 +30,6 @@ UINTN mValidNonMmramCount;
// Maximum support address used to check input buffer
//
extern EFI_PHYSICAL_ADDRESS mMmMemLibInternalMaximumSupportAddress;
extern EFI_MMRAM_DESCRIPTOR *mMmMemLibInternalMmramRanges;
extern UINTN mMmMemLibInternalMmramCount;
/**
Calculate and save the maximum support address.
@ -79,71 +75,6 @@ MmMemLibCalculateMaximumSupportAddress (
DEBUG ((DEBUG_INFO, "mMmMemLibInternalMaximumSupportAddress = 0x%lx\n", mMmMemLibInternalMaximumSupportAddress));
}
/**
Initialize cached Mmram Ranges from HOB.
@retval EFI_UNSUPPORTED The routine is unable to extract MMRAM information.
@retval EFI_SUCCESS MmRanges are populated successfully.
**/
EFI_STATUS
MmMemLibInternalPopulateMmramRanges (
VOID
)
{
VOID *HobStart;
EFI_HOB_GUID_TYPE *MmramRangesHob;
EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHobData;
EFI_MMRAM_DESCRIPTOR *MmramDescriptors;
HobStart = GetHobList ();
DEBUG ((DEBUG_INFO, "%a - 0x%x\n", __func__, HobStart));
//
// Search for a Hob containing the MMRAM ranges
//
MmramRangesHob = GetFirstGuidHob (&gEfiSmmSmramMemoryGuid);
if (MmramRangesHob == NULL) {
MmramRangesHob = GetFirstGuidHob (&gEfiMmPeiMmramMemoryReserveGuid);
if (MmramRangesHob == NULL) {
return EFI_UNSUPPORTED;
}
}
MmramRangesHobData = GET_GUID_HOB_DATA (MmramRangesHob);
if ((MmramRangesHobData == NULL) || (MmramRangesHobData->Descriptor == NULL)) {
return EFI_UNSUPPORTED;
}
mMmMemLibInternalMmramCount = MmramRangesHobData->NumberOfMmReservedRegions;
MmramDescriptors = MmramRangesHobData->Descriptor;
mMmMemLibInternalMmramRanges = AllocatePool (mMmMemLibInternalMmramCount * sizeof (EFI_MMRAM_DESCRIPTOR));
if (mMmMemLibInternalMmramRanges) {
CopyMem (
mMmMemLibInternalMmramRanges,
MmramDescriptors,
mMmMemLibInternalMmramCount * sizeof (EFI_MMRAM_DESCRIPTOR)
);
}
return EFI_SUCCESS;
}
/**
Deinitialize cached Mmram Ranges.
**/
VOID
MmMemLibInternalFreeMmramRanges (
VOID
)
{
if (mMmMemLibInternalMmramRanges != NULL) {
FreePool (mMmMemLibInternalMmramRanges);
}
}
/**
Merge the overlapped or continuous ranges in input MemoryRange. This function is to optimize
the process of checking whether a buffer range belongs to the range reported by resource HOB,