mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/PiSmmCpu: Update function call for 2 new APIs.
All page table allocation will use AllocatePageTableMemory(). Add SmmCpuFeaturesCompleteSmmReadyToLock() to PerformRemainingTasks() and PerformPreTasks(). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com> Reviewed-by: "Kinney, Michael D" <michael.d.kinney@intel.com> Cc: "Fan, Jeff" <jeff.fan@intel.com> Cc: "Kinney, Michael D" <michael.d.kinney@intel.com> Cc: "Laszlo Ersek" <lersek@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18981 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b095a5403b
commit
21c1719318
|
@ -770,7 +770,7 @@ Gen4GPageTable (
|
|||
//
|
||||
// Allocate the page table
|
||||
//
|
||||
PageTable = AllocatePages (ExtraPages + 5 + PagesNeeded);
|
||||
PageTable = AllocatePageTableMemory (ExtraPages + 5 + PagesNeeded);
|
||||
ASSERT (PageTable != NULL);
|
||||
|
||||
PageTable = (VOID *)((UINTN)PageTable + EFI_PAGES_TO_SIZE (ExtraPages));
|
||||
|
@ -872,7 +872,7 @@ SetCacheability (
|
|||
//
|
||||
// Allocate a page from SMRAM
|
||||
//
|
||||
NewPageTableAddress = AllocatePages (1);
|
||||
NewPageTableAddress = AllocatePageTableMemory (1);
|
||||
ASSERT (NewPageTableAddress != NULL);
|
||||
|
||||
NewPageTable = (UINT64 *)NewPageTableAddress;
|
||||
|
|
|
@ -970,9 +970,9 @@ PiCpuSmmEntry (
|
|||
//
|
||||
BufferPages = EFI_SIZE_TO_PAGES (SIZE_32KB + TileSize * (mMaxNumberOfCpus - 1));
|
||||
if ((FamilyId == 4) || (FamilyId == 5)) {
|
||||
Buffer = AllocateAlignedCodePages (BufferPages, SIZE_32KB);
|
||||
Buffer = AllocateAlignedPages (BufferPages, SIZE_32KB);
|
||||
} else {
|
||||
Buffer = AllocateAlignedCodePages (BufferPages, SIZE_4KB);
|
||||
Buffer = AllocateAlignedPages (BufferPages, SIZE_4KB);
|
||||
}
|
||||
ASSERT (Buffer != NULL);
|
||||
DEBUG ((EFI_D_INFO, "SMRAM SaveState Buffer (0x%08x, 0x%08x)\n", Buffer, EFI_PAGES_TO_SIZE(BufferPages)));
|
||||
|
@ -1415,6 +1415,35 @@ ConfigSmmCodeAccessCheck (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
This API provides a way to allocate memory for page table.
|
||||
|
||||
This API can be called more once to allocate memory for page tables.
|
||||
|
||||
Allocates the number of 4KB pages of type EfiRuntimeServicesData and returns a pointer to the
|
||||
allocated buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL
|
||||
is returned. If there is not enough memory remaining to satisfy the request, then NULL is
|
||||
returned.
|
||||
|
||||
@param Pages The number of 4 KB pages to allocate.
|
||||
|
||||
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
AllocatePageTableMemory (
|
||||
IN UINTN Pages
|
||||
)
|
||||
{
|
||||
VOID *Buffer;
|
||||
|
||||
Buffer = SmmCpuFeaturesAllocatePageTableMemory (Pages);
|
||||
if (Buffer != NULL) {
|
||||
return Buffer;
|
||||
}
|
||||
return AllocatePages (Pages);
|
||||
}
|
||||
|
||||
/**
|
||||
Perform the remaining tasks.
|
||||
|
||||
|
@ -1440,6 +1469,8 @@ PerformRemainingTasks (
|
|||
//
|
||||
ConfigSmmCodeAccessCheck ();
|
||||
|
||||
SmmCpuFeaturesCompleteSmmReadyToLock ();
|
||||
|
||||
//
|
||||
// Clean SMM ready to lock flag
|
||||
//
|
||||
|
@ -1465,6 +1496,8 @@ PerformPreTasks (
|
|||
//
|
||||
ConfigSmmCodeAccessCheck ();
|
||||
|
||||
SmmCpuFeaturesCompleteSmmReadyToLock ();
|
||||
|
||||
mRestoreSmmConfigurationInS3 = FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -718,4 +718,25 @@ VOID
|
|||
DumpModuleInfoByIp (
|
||||
IN UINTN CallerIpAddress
|
||||
);
|
||||
|
||||
/**
|
||||
This API provides a way to allocate memory for page table.
|
||||
|
||||
This API can be called more once to allocate memory for page tables.
|
||||
|
||||
Allocates the number of 4KB pages of type EfiRuntimeServicesData and returns a pointer to the
|
||||
allocated buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL
|
||||
is returned. If there is not enough memory remaining to satisfy the request, then NULL is
|
||||
returned.
|
||||
|
||||
@param Pages The number of 4 KB pages to allocate.
|
||||
|
||||
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
AllocatePageTableMemory (
|
||||
IN UINTN Pages
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -552,7 +552,7 @@ InitPaging (
|
|||
//
|
||||
ASSERT (Address == (*Pte & PHYSICAL_ADDRESS_MASK));
|
||||
|
||||
Pt = AllocatePages (1);
|
||||
Pt = AllocatePageTableMemory (1);
|
||||
ASSERT (Pt != NULL);
|
||||
|
||||
// Split it
|
||||
|
|
Loading…
Reference in New Issue