mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
UefiCpuPkg/MpInitLib: Register one period event to check APs status
In DxeMpInitLib, register one period event callback function CheckAPsStatus() used to check AP Status. v5: 1. Introduce AP_CHECK_INTERVAL for adjust AP check timer interval potential. v3: 1. Use CamelCase for mCheckAllAPsEvent, mStopCheckAllApsStatus and CheckAndUpdateApsStatus(). 2. Move SetTimer() from Patch #17 to Patch 16. Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Giri P Mudusuru <giri.p.mudusuru@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Michael Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
6dc05093a0
commit
963788618b
@ -13,7 +13,16 @@
|
||||
**/
|
||||
|
||||
#include "MpLib.h"
|
||||
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
|
||||
#define AP_CHECK_INTERVAL (EFI_TIMER_PERIOD_MILLISECONDS (100))
|
||||
|
||||
CPU_MP_DATA *mCpuMpData = NULL;
|
||||
EFI_EVENT mCheckAllApsEvent = NULL;
|
||||
volatile BOOLEAN mStopCheckAllApsStatus = TRUE;
|
||||
|
||||
|
||||
/**
|
||||
Get the pointer to CPU MP Data structure.
|
||||
@ -42,6 +51,43 @@ SaveCpuMpData (
|
||||
mCpuMpData = CpuMpData;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
Checks APs status and updates APs status if needed.
|
||||
|
||||
**/
|
||||
VOID
|
||||
CheckAndUpdateApsStatus (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
Checks APs' status periodically.
|
||||
|
||||
This function is triggerred by timer perodically to check the
|
||||
state of APs for StartupAllAPs() and StartupThisAP() executed
|
||||
in non-blocking mode.
|
||||
|
||||
@param[in] Event Event triggered.
|
||||
@param[in] Context Parameter passed with the event.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
CheckApsStatus (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
//
|
||||
// If CheckApsStatus() is not stopped, otherwise return immediately.
|
||||
//
|
||||
if (!mStopCheckAllApsStatus) {
|
||||
CheckAndUpdateApsStatus ();
|
||||
}
|
||||
}
|
||||
/**
|
||||
Initialize global data for MP support.
|
||||
|
||||
@ -52,8 +98,28 @@ InitMpGlobalData (
|
||||
IN CPU_MP_DATA *CpuMpData
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
SaveCpuMpData (CpuMpData);
|
||||
|
||||
Status = gBS->CreateEvent (
|
||||
EVT_TIMER | EVT_NOTIFY_SIGNAL,
|
||||
TPL_NOTIFY,
|
||||
CheckApsStatus,
|
||||
NULL,
|
||||
&mCheckAllApsEvent
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Set timer to check all APs status.
|
||||
//
|
||||
Status = gBS->SetTimer (
|
||||
mCheckAllApsEvent,
|
||||
TimerPeriodic,
|
||||
AP_CHECK_INTERVAL
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user