From 69dfa8d87a9b14dce5b1fd2900ebe04c8860a200 Mon Sep 17 00:00:00 2001 From: Jian J Wang Date: Wed, 24 Jan 2018 20:09:02 +0800 Subject: [PATCH] UefiCpuPkg/MpInitLib: fix AP init issue in 64-bit PEI This issue is introduced by a patch at f32bfe6d061420a15bac6083063d227c567e6388 The above patch miss the case of 64-bit PEI, which will link X64/MpFuncs.nasm instead of Ia32/MpFuncs.nasm. For X64/MpFuncs.nasm, ExchangeInfo->ModeHighMemory should be always initialized no matter if separate wakeup buffer is allocated or not. Ia32/MpFuncs.nasm will not need ModeHighMemory during AP init. So the changes made in this patch should not affect the functionality of it. Cc: Ruiyu Ni Cc: Eric Dong Cc: Laszlo Ersek Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang Reviewed-by: Ruiyu Ni --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c index 742f0c1f5e..f8ab5f115d 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -843,14 +843,15 @@ FillExchangeInfoData ( ); ExchangeInfo->ModeTransitionMemory = (UINT32)CpuMpData->WakeupBufferHigh; - ExchangeInfo->ModeHighMemory = (UINT32)CpuMpData->WakeupBufferHigh + - (UINT32)ExchangeInfo->ModeOffset - - (UINT32)CpuMpData->AddressMap.ModeTransitionOffset; - ExchangeInfo->ModeHighSegment = (UINT16)ExchangeInfo->CodeSegment; } else { ExchangeInfo->ModeTransitionMemory = (UINT32) (ExchangeInfo->BufferStart + CpuMpData->AddressMap.ModeTransitionOffset); } + + ExchangeInfo->ModeHighMemory = ExchangeInfo->ModeTransitionMemory + + (UINT32)ExchangeInfo->ModeOffset - + (UINT32)CpuMpData->AddressMap.ModeTransitionOffset; + ExchangeInfo->ModeHighSegment = (UINT16)ExchangeInfo->CodeSegment; } /** -- 2.39.2