From e4ff8521364062303cd93f87a0d9c0bacc9ebe65 Mon Sep 17 00:00:00 2001 From: Ray Ni Date: Fri, 26 May 2023 22:32:00 +0800 Subject: MdeModulePkg/SmmCore: Add perf-logging for time-consuming procedures Following procedures are perf-logged: * SmmReadyToBootHandler * SmmReadyToLockHandler * SmmEndOfDxeHandler * SmmEntryPoint (It's the main routine run in BSP when SMI happens.) * SmiManage Signed-off-by: Ray Ni Cc: Jian J Wang Cc: Liming Gao Cc: Jiaxin Wu Reviewed-by: Jiaxin Wu Reviewed-by: Eric Dong Reviewed-by: Jian J Wang --- MdeModulePkg/Core/PiSmmCore/PiSmmCore.c | 15 ++++++++++++++- MdeModulePkg/Core/PiSmmCore/Smi.c | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'MdeModulePkg/Core') diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c index 875c7c0..68af9ab 100644 --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c @@ -1,7 +1,7 @@ /** @file SMM Core Main Entry Point - Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.
+ Copyright (c) 2009 - 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -305,6 +305,8 @@ SmmReadyToBootHandler ( EFI_STATUS Status; EFI_HANDLE SmmHandle; + PERF_CALLBACK_BEGIN (&gEfiEventReadyToBootGuid); + // // Install SMM Ready To Boot protocol. // @@ -318,6 +320,7 @@ SmmReadyToBootHandler ( SmiHandlerUnRegister (DispatchHandle); + PERF_CALLBACK_END (&gEfiEventReadyToBootGuid); return Status; } @@ -352,6 +355,8 @@ SmmReadyToLockHandler ( EFI_HANDLE SmmHandle; VOID *Interface; + PERF_CALLBACK_BEGIN (&gEfiDxeSmmReadyToLockProtocolGuid); + // // Unregister SMI Handlers that are no required after the SMM driver dispatch is stopped // @@ -408,6 +413,7 @@ SmmReadyToLockHandler ( SmramProfileReadyToLock (); + PERF_CALLBACK_END (&gEfiDxeSmmReadyToLockProtocolGuid); return Status; } @@ -442,6 +448,8 @@ SmmEndOfDxeHandler ( DEBUG ((DEBUG_INFO, "SmmEndOfDxeHandler\n")); + PERF_CALLBACK_BEGIN (&gEfiEndOfDxeEventGroupGuid); + // // Install SMM EndOfDxe protocol // @@ -479,6 +487,7 @@ SmmEndOfDxeHandler ( } } + PERF_CALLBACK_END (&gEfiEndOfDxeEventGroupGuid); return EFI_SUCCESS; } @@ -669,6 +678,8 @@ SmmEntryPoint ( VOID *CommunicationBuffer; UINTN BufferSize; + PERF_FUNCTION_BEGIN (); + // // Update SMST with contents of the SmmEntryContext structure // @@ -769,6 +780,8 @@ SmmEntryPoint ( // gSmmCorePrivate->InSmm = FALSE; } + + PERF_FUNCTION_END (); } /** diff --git a/MdeModulePkg/Core/PiSmmCore/Smi.c b/MdeModulePkg/Core/PiSmmCore/Smi.c index 6d13969..2985f98 100644 --- a/MdeModulePkg/Core/PiSmmCore/Smi.c +++ b/MdeModulePkg/Core/PiSmmCore/Smi.c @@ -109,6 +109,8 @@ SmiManage ( BOOLEAN SuccessReturn; EFI_STATUS Status; + PERF_FUNCTION_BEGIN (); + Status = EFI_NOT_FOUND; SuccessReturn = FALSE; if (HandlerType == NULL) { @@ -125,6 +127,7 @@ SmiManage ( // // There is no handler registered for this interrupt source // + PERF_FUNCTION_END (); return Status; } } @@ -148,6 +151,7 @@ SmiManage ( // no additional handlers will be processed and EFI_INTERRUPT_PENDING will be returned. // if (HandlerType != NULL) { + PERF_FUNCTION_END (); return EFI_INTERRUPT_PENDING; } @@ -160,6 +164,7 @@ SmiManage ( // additional handlers will be processed. // if (HandlerType != NULL) { + PERF_FUNCTION_END (); return EFI_SUCCESS; } @@ -194,6 +199,7 @@ SmiManage ( Status = EFI_SUCCESS; } + PERF_FUNCTION_END (); return Status; } -- cgit v1.1