spec does not say the unregistration is allowed inside handler. it's just to improve the qualiquali the code. thanks, ray ________________________________ From: Laszlo Ersek Sent: Wednesday, January 24, 2024 9:06:13 PM To: devel@edk2.groups.io ; Ni, Ray ; Liu, Zhiguang Cc: Liming Gao ; Wu, Jiaxin ; POLUDOV, FELIX Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/SMM: Support to unregister SMI handler inside SMI handler On 1/24/24 09:11, Ni, Ray wrote: > Felix, I remember you mentioned to me about the usage of SMI handler unregistering itself. I wanted to ask: is this something that the PI spec comments on? I.e., is this usage expected by the spec (in which case this bugfix is a conformance fix), or is the spec silent on it (in which case I guess we can call this a quality-of-implementation improvement)? > > Reviewed-by: Ray Ni Reviewed-by: Laszlo Ersek Thanks Laszlo > > Thanks, > Ray >> -----Original Message----- >> From: Liu, Zhiguang >> Sent: Wednesday, January 24, 2024 12:03 PM >> To: devel@edk2.groups.io >> Cc: Liu, Zhiguang ; Liming Gao >> ; Wu, Jiaxin ; Ni, Ray >> >> Subject: [PATCH] MdeModulePkg/SMM: Support to unregister SMI handler >> inside SMI handler >> >> To support unregister SMI handler inside SMI handler itself, >> get next node before SMI handler is executed, since LIST_ENTRY that >> Link points to may be freed if unregister SMI handler in SMI handler >> itself. >> >> Cc: Liming Gao >> Cc: Jiaxin Wu >> Cc: Ray Ni >> Signed-off-by: Zhiguang Liu >> --- >> MdeModulePkg/Core/PiSmmCore/Smi.c | 8 +++++++- >> 1 file changed, 7 insertions(+), 1 deletion(-) >> >> diff --git a/MdeModulePkg/Core/PiSmmCore/Smi.c >> b/MdeModulePkg/Core/PiSmmCore/Smi.c >> index 2985f989c3..a75e52b1ae 100644 >> --- a/MdeModulePkg/Core/PiSmmCore/Smi.c >> +++ b/MdeModulePkg/Core/PiSmmCore/Smi.c >> @@ -134,8 +134,14 @@ SmiManage ( >> >> Head = &SmiEntry->SmiHandlers; >> >> - for (Link = Head->ForwardLink; Link != Head; Link = Link->ForwardLink) { >> + for (Link = Head->ForwardLink; Link != Head;) { >> SmiHandler = CR (Link, SMI_HANDLER, Link, >> SMI_HANDLER_SIGNATURE); >> + // >> + // To support unregiser SMI handler inside SMI handler itself, >> + // get next node before handler is executed, since LIST_ENTRY that >> + // Link points to may be freed if unregister SMI handler. >> + // >> + Link = Link->ForwardLink; >> >> Status = SmiHandler->Handler ( >> (EFI_HANDLE)SmiHandler, >> -- >> 2.31.1.windows.1 > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#114317): https://edk2.groups.io/g/devel/message/114317 Mute This Topic: https://groups.io/mt/103925794/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-