mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-31 01:24:12 +02:00
UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973 Add new MpInitLibStartupAllCPUs API uses to start all processors at the same time. Cc: Ray Ni <ray.ni@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Chandana Kumar <chandana.c.kumar@intel.com> Cc: Star Zeng <star.zeng@intel.com> Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
92b5a2eabc
commit
ee0c39fa11
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
MP initialize support functions for DXE phase.
|
MP initialize support functions for DXE phase.
|
||||||
|
|
||||||
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -568,9 +568,10 @@ MpInitLibStartupAllAPs (
|
|||||||
//
|
//
|
||||||
mStopCheckAllApsStatus = TRUE;
|
mStopCheckAllApsStatus = TRUE;
|
||||||
|
|
||||||
Status = StartupAllAPsWorker (
|
Status = StartupAllCPUsWorker (
|
||||||
Procedure,
|
Procedure,
|
||||||
SingleThread,
|
SingleThread,
|
||||||
|
TRUE,
|
||||||
WaitEvent,
|
WaitEvent,
|
||||||
TimeoutInMicroseconds,
|
TimeoutInMicroseconds,
|
||||||
ProcedureArgument,
|
ProcedureArgument,
|
||||||
|
@ -2130,6 +2130,7 @@ MpInitLibGetNumberOfProcessors (
|
|||||||
number. If FALSE, then all the enabled APs
|
number. If FALSE, then all the enabled APs
|
||||||
execute the function specified by Procedure
|
execute the function specified by Procedure
|
||||||
simultaneously.
|
simultaneously.
|
||||||
|
@param[in] ExcludeBsp Whether let BSP also trig this task.
|
||||||
@param[in] WaitEvent The event created by the caller with CreateEvent()
|
@param[in] WaitEvent The event created by the caller with CreateEvent()
|
||||||
service.
|
service.
|
||||||
@param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for
|
@param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for
|
||||||
@ -2151,9 +2152,10 @@ MpInitLibGetNumberOfProcessors (
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
StartupAllAPsWorker (
|
StartupAllCPUsWorker (
|
||||||
IN EFI_AP_PROCEDURE Procedure,
|
IN EFI_AP_PROCEDURE Procedure,
|
||||||
IN BOOLEAN SingleThread,
|
IN BOOLEAN SingleThread,
|
||||||
|
IN BOOLEAN ExcludeBsp,
|
||||||
IN EFI_EVENT WaitEvent OPTIONAL,
|
IN EFI_EVENT WaitEvent OPTIONAL,
|
||||||
IN UINTN TimeoutInMicroseconds,
|
IN UINTN TimeoutInMicroseconds,
|
||||||
IN VOID *ProcedureArgument OPTIONAL,
|
IN VOID *ProcedureArgument OPTIONAL,
|
||||||
@ -2175,7 +2177,7 @@ StartupAllAPsWorker (
|
|||||||
*FailedCpuList = NULL;
|
*FailedCpuList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CpuMpData->CpuCount == 1) {
|
if (CpuMpData->CpuCount == 1 && ExcludeBsp) {
|
||||||
return EFI_NOT_STARTED;
|
return EFI_NOT_STARTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2218,9 +2220,9 @@ StartupAllAPsWorker (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!HasEnabledAp) {
|
if (!HasEnabledAp && ExcludeBsp) {
|
||||||
//
|
//
|
||||||
// If no enabled AP exists, return EFI_NOT_STARTED.
|
// If no enabled AP exists and not include Bsp to do the procedure, return EFI_NOT_STARTED.
|
||||||
//
|
//
|
||||||
return EFI_NOT_STARTED;
|
return EFI_NOT_STARTED;
|
||||||
}
|
}
|
||||||
@ -2266,6 +2268,13 @@ StartupAllAPsWorker (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ExcludeBsp) {
|
||||||
|
//
|
||||||
|
// Start BSP.
|
||||||
|
//
|
||||||
|
Procedure (ProcedureArgument);
|
||||||
|
}
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
if (WaitEvent == NULL) {
|
if (WaitEvent == NULL) {
|
||||||
do {
|
do {
|
||||||
@ -2411,3 +2420,47 @@ GetCpuMpDataFromGuidedHob (
|
|||||||
return CpuMpData;
|
return CpuMpData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This service executes a caller provided function on all enabled CPUs.
|
||||||
|
|
||||||
|
@param[in] Procedure A pointer to the function to be run on
|
||||||
|
enabled APs of the system. See type
|
||||||
|
EFI_AP_PROCEDURE.
|
||||||
|
@param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for
|
||||||
|
APs to return from Procedure, either for
|
||||||
|
blocking or non-blocking mode. Zero means
|
||||||
|
infinity. TimeoutInMicroseconds is ignored
|
||||||
|
for BSP.
|
||||||
|
@param[in] ProcedureArgument The parameter passed into Procedure for
|
||||||
|
all APs.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS In blocking mode, all CPUs have finished before
|
||||||
|
the timeout expired.
|
||||||
|
@retval EFI_SUCCESS In non-blocking mode, function has been dispatched
|
||||||
|
to all enabled CPUs.
|
||||||
|
@retval EFI_DEVICE_ERROR Caller processor is AP.
|
||||||
|
@retval EFI_NOT_READY Any enabled APs are busy.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
@retval EFI_TIMEOUT In blocking mode, the timeout expired before
|
||||||
|
all enabled APs have finished.
|
||||||
|
@retval EFI_INVALID_PARAMETER Procedure is NULL.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
MpInitLibStartupAllCPUs (
|
||||||
|
IN EFI_AP_PROCEDURE Procedure,
|
||||||
|
IN UINTN TimeoutInMicroseconds,
|
||||||
|
IN VOID *ProcedureArgument OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return StartupAllCPUsWorker (
|
||||||
|
Procedure,
|
||||||
|
FALSE,
|
||||||
|
FALSE,
|
||||||
|
NULL,
|
||||||
|
TimeoutInMicroseconds,
|
||||||
|
ProcedureArgument,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Common header file for MP Initialize Library.
|
Common header file for MP Initialize Library.
|
||||||
|
|
||||||
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -405,6 +405,7 @@ InitMpGlobalData (
|
|||||||
number. If FALSE, then all the enabled APs
|
number. If FALSE, then all the enabled APs
|
||||||
execute the function specified by Procedure
|
execute the function specified by Procedure
|
||||||
simultaneously.
|
simultaneously.
|
||||||
|
@param[in] ExcludeBsp Whether let BSP also trig this task.
|
||||||
@param[in] WaitEvent The event created by the caller with CreateEvent()
|
@param[in] WaitEvent The event created by the caller with CreateEvent()
|
||||||
service.
|
service.
|
||||||
@param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for
|
@param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for
|
||||||
@ -426,9 +427,10 @@ InitMpGlobalData (
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
StartupAllAPsWorker (
|
StartupAllCPUsWorker (
|
||||||
IN EFI_AP_PROCEDURE Procedure,
|
IN EFI_AP_PROCEDURE Procedure,
|
||||||
IN BOOLEAN SingleThread,
|
IN BOOLEAN SingleThread,
|
||||||
|
IN BOOLEAN ExcludeBsp,
|
||||||
IN EFI_EVENT WaitEvent OPTIONAL,
|
IN EFI_EVENT WaitEvent OPTIONAL,
|
||||||
IN UINTN TimeoutInMicroseconds,
|
IN UINTN TimeoutInMicroseconds,
|
||||||
IN VOID *ProcedureArgument OPTIONAL,
|
IN VOID *ProcedureArgument OPTIONAL,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
MP initialize support functions for PEI phase.
|
MP initialize support functions for PEI phase.
|
||||||
|
|
||||||
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -401,9 +401,10 @@ MpInitLibStartupAllAPs (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return StartupAllAPsWorker (
|
return StartupAllCPUsWorker (
|
||||||
Procedure,
|
Procedure,
|
||||||
SingleThread,
|
SingleThread,
|
||||||
|
TRUE,
|
||||||
NULL,
|
NULL,
|
||||||
TimeoutInMicroseconds,
|
TimeoutInMicroseconds,
|
||||||
ProcedureArgument,
|
ProcedureArgument,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user