109 lines
3.3 KiB
Diff
109 lines
3.3 KiB
Diff
From 78881a773805298141feaeaf5670ebce616a8338 Mon Sep 17 00:00:00 2001
|
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
|
Date: Thu, 22 Feb 2024 17:01:01 +0100
|
|
Subject: [PATCH 05/10] UefiCpuPkg/MpInitLib: Add support for multiple HOBs to
|
|
GetMpHandOffHob
|
|
|
|
RH-Author: Gerd Hoffmann <None>
|
|
RH-MergeRequest: 59: backport 4096 vcpu patches for c9s
|
|
RH-Jira: RHEL-22202
|
|
RH-Acked-by: Oliver Steffen <osteffen@redhat.com>
|
|
RH-Commit: [5/10] d738dc794cf7f5b8440bb9c23f21a11eb220add3 (kraxel.rh/centos-src-edk2)
|
|
|
|
Rename the function to GetNextMpHandOffHob(), add MP_HAND_OFF parameter.
|
|
When called with NULL pointer return the body of the first HOB, otherwise
|
|
return the next in the chain.
|
|
|
|
Also add the function prototype to the MpLib.h header file.
|
|
|
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
|
Message-Id: <20240222160106.686484-2-kraxel@redhat.com>
|
|
Reviewed-by: Ray Ni <ray.ni@intel.com>
|
|
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
|
|
(cherry picked from commit a3ee1eea96752cf2d4e0f70310facc109b7c4352)
|
|
---
|
|
UefiCpuPkg/Library/MpInitLib/MpLib.c | 26 ++++++++++++++++----------
|
|
UefiCpuPkg/Library/MpInitLib/MpLib.h | 12 ++++++++++++
|
|
2 files changed, 28 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
|
|
index 7bc93dfa13..00b36b0e18 100644
|
|
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
|
|
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
|
|
@@ -1967,25 +1967,31 @@ SwitchApContext (
|
|
}
|
|
|
|
/**
|
|
- Get pointer to MP_HAND_OFF GUIDed HOB.
|
|
+ Get pointer to next MP_HAND_OFF GUIDed HOB body.
|
|
+
|
|
+ @param[in] MpHandOff Previous HOB body. Pass NULL to get the first HOB.
|
|
|
|
@return The pointer to MP_HAND_OFF structure.
|
|
**/
|
|
MP_HAND_OFF *
|
|
-GetMpHandOffHob (
|
|
- VOID
|
|
+GetNextMpHandOffHob (
|
|
+ IN CONST MP_HAND_OFF *MpHandOff
|
|
)
|
|
{
|
|
EFI_HOB_GUID_TYPE *GuidHob;
|
|
- MP_HAND_OFF *MpHandOff;
|
|
|
|
- MpHandOff = NULL;
|
|
- GuidHob = GetFirstGuidHob (&mMpHandOffGuid);
|
|
- if (GuidHob != NULL) {
|
|
- MpHandOff = (MP_HAND_OFF *)GET_GUID_HOB_DATA (GuidHob);
|
|
+ if (MpHandOff == NULL) {
|
|
+ GuidHob = GetFirstGuidHob (&mMpHandOffGuid);
|
|
+ } else {
|
|
+ GuidHob = (VOID *)(((UINT8 *)MpHandOff) - sizeof (EFI_HOB_GUID_TYPE));
|
|
+ GuidHob = GetNextGuidHob (&mMpHandOffGuid, GET_NEXT_HOB (GuidHob));
|
|
+ }
|
|
+
|
|
+ if (GuidHob == NULL) {
|
|
+ return NULL;
|
|
}
|
|
|
|
- return MpHandOff;
|
|
+ return (MP_HAND_OFF *)GET_GUID_HOB_DATA (GuidHob);
|
|
}
|
|
|
|
/**
|
|
@@ -2026,7 +2032,7 @@ MpInitLibInitialize (
|
|
UINTN BackupBufferAddr;
|
|
UINTN ApIdtBase;
|
|
|
|
- MpHandOff = GetMpHandOffHob ();
|
|
+ MpHandOff = GetNextMpHandOffHob (NULL);
|
|
if (MpHandOff == NULL) {
|
|
MaxLogicalProcessorNumber = PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
|
|
} else {
|
|
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h
|
|
index a96a6389c1..fab2b2d493 100644
|
|
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.h
|
|
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h
|
|
@@ -485,6 +485,18 @@ SwitchApContext (
|
|
IN MP_HAND_OFF *MpHandOff
|
|
);
|
|
|
|
+/**
|
|
+ Get pointer to next MP_HAND_OFF GUIDed HOB body.
|
|
+
|
|
+ @param[in] MpHandOff Previous HOB body. Pass NULL to get the first HOB.
|
|
+
|
|
+ @return The pointer to MP_HAND_OFF structure.
|
|
+**/
|
|
+MP_HAND_OFF *
|
|
+GetNextMpHandOffHob (
|
|
+ IN CONST MP_HAND_OFF *MpHandOff
|
|
+ );
|
|
+
|
|
/**
|
|
Get available EfiBootServicesCode memory below 4GB by specified size.
|
|
|
|
--
|
|
2.39.3
|
|
|