This reverts commit "StandaloneMmPkg: Disallow unregister MMI
handler in other MMI handler" for better design later.

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
This commit is contained in:
Zhiguang Liu 2024-03-08 13:46:14 +08:00 committed by mergify[bot]
parent 5ba3602e45
commit 31cd5ee8c0
1 changed files with 9 additions and 23 deletions

View File

@ -36,9 +36,8 @@ typedef struct {
MMI_ENTRY *MmiEntry;
} MMI_HANDLER;
LIST_ENTRY mRootMmiHandlerList = INITIALIZE_LIST_HEAD_VARIABLE (mRootMmiHandlerList);
LIST_ENTRY mMmiEntryList = INITIALIZE_LIST_HEAD_VARIABLE (mMmiEntryList);
MMI_HANDLER *mCurrentMmiHandler = NULL;
LIST_ENTRY mRootMmiHandlerList = INITIALIZE_LIST_HEAD_VARIABLE (mRootMmiHandlerList);
LIST_ENTRY mMmiEntryList = INITIALIZE_LIST_HEAD_VARIABLE (mMmiEntryList);
/**
Finds the MMI entry for the requested handler type.
@ -162,19 +161,13 @@ MmiManage (
// get next node before handler is executed, since LIST_ENTRY that
// Link points to may be freed if unregister MMI handler.
//
Link = Link->ForwardLink;
//
// Assign gCurrentMmiHandle before calling the MMI handler and
// set to NULL when it returns.
//
mCurrentMmiHandler = MmiHandler;
Status = MmiHandler->Handler (
(EFI_HANDLE)MmiHandler,
Context,
CommBuffer,
CommBufferSize
);
mCurrentMmiHandler = NULL;
Link = Link->ForwardLink;
Status = MmiHandler->Handler (
(EFI_HANDLE)MmiHandler,
Context,
CommBuffer,
CommBufferSize
);
switch (Status) {
case EFI_INTERRUPT_PENDING:
@ -321,13 +314,6 @@ MmiHandlerUnRegister (
return EFI_INVALID_PARAMETER;
}
//
// Do not allow to unregister MMI Handler inside other MMI Handler
//
if ((mCurrentMmiHandler != NULL) && (mCurrentMmiHandler != MmiHandler)) {
return EFI_INVALID_PARAMETER;
}
MmiEntry = MmiHandler->MmiEntry;
RemoveEntryList (&MmiHandler->Link);