MdeModulePkg/SmmCorePerformanceLib: Disable perf-logging at runtime

Because SMM perf-logging is migrated to non-SMRAM at ReadyToBoot
by DxeCorePerformanceLib, the perf-logging after ExitBS is useless and
impact the SMI latency at runtime.
Hence the SmmCorePerformanceLib is updated to disable perf-logging
after ExitBS.

Signed-off-by: Ray Ni <ray.ni@intel.com>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Jian J Wang <jian.j.wang@intel.com>
Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
This commit is contained in:
Ray Ni 2023-05-31 19:29:31 +08:00 committed by mergify[bot]
parent 92759eeb0c
commit 2d3974a351
2 changed files with 47 additions and 3 deletions

View File

@ -16,7 +16,7 @@
SmmPerformanceHandlerEx(), SmmPerformanceHandler() will receive untrusted input and do basic validation.
Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2011 - 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@ -48,6 +48,7 @@ SPIN_LOCK mSmmFpdtLock;
PERFORMANCE_PROPERTY mPerformanceProperty;
UINT32 mCachedLength = 0;
UINT32 mBootRecordSize = 0;
BOOLEAN mPerformanceMeasurementEnabled;
//
// Interfaces for SMM PerformanceMeasurement Protocol.
@ -929,6 +930,35 @@ FpdtSmiHandler (
return EFI_SUCCESS;
}
/**
This is the Event call back function is triggered in SMM to notify the Library
the system is entering runtime phase.
@param[in] Protocol Points to the protocol's unique identifier
@param[in] Interface Points to the interface instance
@param[in] Handle The handle on which the interface was installed
@retval EFI_SUCCESS SmmAtRuntimeCallBack runs successfully
**/
EFI_STATUS
EFIAPI
SmmCorePerformanceLibExitBootServicesCallback (
IN CONST EFI_GUID *Protocol,
IN VOID *Interface,
IN EFI_HANDLE Handle
)
{
//
// Disable performance measurement after ExitBootServices because
// 1. Performance measurement might impact SMI latency at runtime;
// 2. Performance log is copied to non SMRAM at ReadyToBoot so runtime performance
// log is not useful.
//
mPerformanceMeasurementEnabled = FALSE;
return EFI_SUCCESS;
}
/**
SmmBase2 protocol notify callback function, when SMST and SMM memory service get initialized
this function is callbacked to initialize the Smm Performance Lib
@ -948,6 +978,7 @@ InitializeSmmCorePerformanceLib (
EFI_HANDLE SmiHandle;
EFI_STATUS Status;
PERFORMANCE_PROPERTY *PerformanceProperty;
VOID *Registration;
//
// Initialize spin lock
@ -987,6 +1018,16 @@ InitializeSmmCorePerformanceLib (
Status = gBS->InstallConfigurationTable (&gPerformanceProtocolGuid, &mPerformanceProperty);
ASSERT_EFI_ERROR (Status);
}
//
// Register callback function for ExitBootServices event.
//
Status = gSmst->SmmRegisterProtocolNotify (
&gEdkiiSmmExitBootServicesProtocolGuid,
SmmCorePerformanceLibExitBootServicesCallback,
&Registration
);
ASSERT_EFI_ERROR (Status);
}
/**
@ -1011,6 +1052,8 @@ SmmCorePerformanceLibConstructor (
EFI_EVENT Event;
VOID *Registration;
mPerformanceMeasurementEnabled = (BOOLEAN)((PcdGet8 (PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
if (!PerformanceMeasurementEnabled ()) {
//
// Do not initialize performance infrastructure if not required.
@ -1383,7 +1426,7 @@ PerformanceMeasurementEnabled (
VOID
)
{
return (BOOLEAN)((PcdGet8 (PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
return mPerformanceMeasurementEnabled;
}
/**

View File

@ -8,7 +8,7 @@
# This library is mainly used by SMM Core to start performance logging to ensure that
# SMM Performance and PerformanceEx Protocol are installed at the very beginning of SMM phase.
#
# Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2011 - 2023, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@ -58,6 +58,7 @@
[Protocols]
gEfiSmmBase2ProtocolGuid ## CONSUMES
gEdkiiSmmExitBootServicesProtocolGuid ## CONSUMES
[Guids]
## PRODUCES ## SystemTable