X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=StandaloneMmPkg%2FCore%2FPage.c;fp=StandaloneMmPkg%2FCore%2FPage.c;h=8ee85d19dbac07fcb043fb27bfab6c90db096a7b;hp=a9bdd73cdc24b4db888d25a47d903eb44ab37a0c;hb=91415a36ae7aaeabb2bbab3762f39544f9aed683;hpb=c1e126b1196de75e0a4cda21e4551ea9bb05e059 diff --git a/StandaloneMmPkg/Core/Page.c b/StandaloneMmPkg/Core/Page.c index a9bdd73cdc..8ee85d19db 100644 --- a/StandaloneMmPkg/Core/Page.c +++ b/StandaloneMmPkg/Core/Page.c @@ -16,7 +16,7 @@ LIST_ENTRY mMmMemoryMap = INITIALIZE_LIST_HEAD_VARIABLE (mMmMemoryMap); -UINTN mMapKey; +UINTN mMapKey; /** Internal Function. Allocate n pages from given free page node. @@ -43,10 +43,11 @@ InternalAllocPagesOnOneNode ( if (Top > Pages->NumberOfPages) { Top = Pages->NumberOfPages; } + Bottom = Top - NumberOfPages; if (Top < Pages->NumberOfPages) { - Node = (FREE_PAGE_LIST*)((UINTN)Pages + EFI_PAGES_TO_SIZE (Top)); + Node = (FREE_PAGE_LIST *)((UINTN)Pages + EFI_PAGES_TO_SIZE (Top)); Node->NumberOfPages = Pages->NumberOfPages - Top; InsertHeadList (&Pages->Link, &Node->Link); } @@ -82,11 +83,13 @@ InternalAllocMaxAddress ( for (Node = FreePageList->BackLink; Node != FreePageList; Node = Node->BackLink) { Pages = BASE_CR (Node, FREE_PAGE_LIST, Link); - if (Pages->NumberOfPages >= NumberOfPages && - (UINTN)Pages + EFI_PAGES_TO_SIZE (NumberOfPages) - 1 <= MaxAddress) { + if ((Pages->NumberOfPages >= NumberOfPages) && + ((UINTN)Pages + EFI_PAGES_TO_SIZE (NumberOfPages) - 1 <= MaxAddress)) + { return InternalAllocPagesOnOneNode (Pages, NumberOfPages, MaxAddress); } } + return (UINTN)(-1); } @@ -116,15 +119,17 @@ InternalAllocAddress ( } EndAddress = Address + EFI_PAGES_TO_SIZE (NumberOfPages); - for (Node = FreePageList->BackLink; Node!= FreePageList; Node = Node->BackLink) { + for (Node = FreePageList->BackLink; Node != FreePageList; Node = Node->BackLink) { Pages = BASE_CR (Node, FREE_PAGE_LIST, Link); if ((UINTN)Pages <= Address) { if ((UINTN)Pages + EFI_PAGES_TO_SIZE (Pages->NumberOfPages) < EndAddress) { break; } + return InternalAllocPagesOnOneNode (Pages, NumberOfPages, EndAddress); } } + return ~Address; } @@ -155,8 +160,9 @@ MmInternalAllocatePages ( { UINTN RequestedAddress; - if (MemoryType != EfiRuntimeServicesCode && - MemoryType != EfiRuntimeServicesData) { + if ((MemoryType != EfiRuntimeServicesCode) && + (MemoryType != EfiRuntimeServicesData)) + { return EFI_INVALID_PARAMETER; } @@ -180,6 +186,7 @@ MmInternalAllocatePages ( if (*Memory == (UINTN)-1) { return EFI_OUT_OF_RESOURCES; } + break; case AllocateAddress: *Memory = InternalAllocAddress ( @@ -190,10 +197,12 @@ MmInternalAllocatePages ( if (*Memory != RequestedAddress) { return EFI_NOT_FOUND; } + break; default: return EFI_INVALID_PARAMETER; } + return EFI_SUCCESS; } @@ -245,13 +254,15 @@ InternalMergeNodes ( Next = BASE_CR (First->Link.ForwardLink, FREE_PAGE_LIST, Link); ASSERT ( - TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) >= First->NumberOfPages); + TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) >= First->NumberOfPages + ); if (TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) == First->NumberOfPages) { First->NumberOfPages += Next->NumberOfPages; RemoveEntryList (&Next->Link); Next = First; } + return Next; } @@ -281,17 +292,19 @@ MmInternalFreePages ( } Pages = NULL; - Node = mMmMemoryMap.ForwardLink; + Node = mMmMemoryMap.ForwardLink; while (Node != &mMmMemoryMap) { Pages = BASE_CR (Node, FREE_PAGE_LIST, Link); if (Memory < (UINTN)Pages) { break; } + Node = Node->ForwardLink; } - if (Node != &mMmMemoryMap && - Memory + EFI_PAGES_TO_SIZE (NumberOfPages) > (UINTN)Pages) { + if ((Node != &mMmMemoryMap) && + (Memory + EFI_PAGES_TO_SIZE (NumberOfPages) > (UINTN)Pages)) + { return EFI_INVALID_PARAMETER; } @@ -302,7 +315,7 @@ MmInternalFreePages ( } } - Pages = (FREE_PAGE_LIST*)(UINTN)Memory; + Pages = (FREE_PAGE_LIST *)(UINTN)Memory; Pages->NumberOfPages = NumberOfPages; InsertTailList (Node, &Pages->Link); @@ -373,6 +386,6 @@ MmAddMemoryRegion ( // Align range on an EFI_PAGE_SIZE boundary // AlignedMemBase = (UINTN)(MemBase + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; - MemLength -= AlignedMemBase - MemBase; + MemLength -= AlignedMemBase - MemBase; MmFreePages (AlignedMemBase, TRUNCATE_TO_PAGES ((UINTN)MemLength)); }