From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web08.6073.1614907494156614939 for ; Thu, 04 Mar 2021 17:24:55 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: gaoliming@byosoft.com.cn) Received: from DESKTOPS6D0PVI ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Fri, 05 Mar 2021 09:24:50 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-Originating-IP: 58.246.60.130 X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming" To: "'Wu, Jiaxin'" , Cc: "'Kinney, Michael D'" , "'Liu, Zhiguang'" , "'Fu, Siyuan'" References: <166828338BB555BC.18336@groups.io> <007e01d7109c$ffd264c0$ff772e40$@byosoft.com.cn> In-Reply-To: Subject: =?UTF-8?B?5Zue5aSNOiBbZWRrMi1kZXZlbF0gW1BBVENIIHYxXSBNZGVQa2c6IFN1cHBvcnQgc3RhbmRhbG9uZSBNTSBEcml2ZXIgVW5sb2FkIGNhcGFiaWxpdHk=?= Date: Fri, 5 Mar 2021 09:24:52 +0800 Message-ID: <005f01d7115e$579fafc0$06df0f40$@byosoft.com.cn> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQDtmw1/peldOO3VERzHryEGqxJzMAI95uHNAoL7+9oCU4qXiqwO4xmQ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Language: zh-cn That's OK. Reviewed-by: Liming Gao for this patch.=20 > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > =B7=A2=BC=FE=C8=CB: Wu, Jiaxin > =B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA3=D4=C24=C8=D5 11:22 > =CA=D5=BC=FE=C8=CB: gaoliming ; devel@edk2.gro= ups.io > =B3=AD=CB=CD: Kinney, Michael D ; Liu, Zhigu= ang > ; Fu, Siyuan > =D6=F7=CC=E2: RE: [edk2-devel] [PATCH v1] MdePkg: Support standalone MM = Driver > Unload capability >=20 > Hi Liming, >=20 > We internal verified the new added unload logic, works well. >=20 > Thanks, > Jiaxin >=20 > > -----Original Message----- > > From: gaoliming > > Sent: Thursday, March 4, 2021 10:21 AM > > To: devel@edk2.groups.io; Wu, Jiaxin > > Cc: Kinney, Michael D ; Liu, Zhiguang > > ; Fu, Siyuan > > Subject: =BB=D8=B8=B4: [edk2-devel] [PATCH v1] MdePkg: Support standal= one MM > > Driver Unload capability > > > > Jiaxin: > > Have you created the test case to verify the new added unload logic? > > > > Thanks > > Liming > > > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > > > =B7=A2=BC=FE=C8=CB: devel@edk2.groups.io =B4= =FA=B1=ED Wu, > Jiaxin > > > =B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA3=D4=C23=C8=D5 16:49 > > > =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io; Wu, Jiaxin > > > =B3=AD=CB=CD: Kinney, Michael D ; Liming= Gao > > > ; Liu, Zhiguang ; Fu, > > > Siyuan > > > =D6=F7=CC=E2: Re: [edk2-devel] [PATCH v1] MdePkg: Support standalone= MM > > Driver > > > Unload capability > > > > > > Hi Mike & Zhiguang & Liming, > > > > > > Could you help review this patch? > > > > > > Thanks, > > > Jiaxin > > > > > > > > > > > > > -----Original Message----- > > > > From: devel@edk2.groups.io On Behalf Of Wu, > > > > Jiaxin > > > > Sent: Monday, March 1, 2021 3:44 PM > > > > To: devel@edk2.groups.io > > > > Cc: Kinney, Michael D ; Liming Gao > > > > ; Liu, Zhiguang = ; > > Fu, > > > > Siyuan > > > > Subject: [edk2-devel] [PATCH v1] MdePkg: Support standalone MM > > Driver > > > > Unload capability > > > > > > > > https://bugzilla.tianocore.org/show_bug.cgi?id=3D3240 > > > > > > > > This patch is to support standalone MM Driver Unload capability > > > > by providing _DriverUnloadHandler() function. > > > > > > > > Change-Id: I26cdbfccb7052685c464d6394e472c7579b7b67e > > > > Cc: Michael D Kinney > > > > Cc: Liming Gao > > > > Cc: Zhiguang Liu > > > > Cc: Siyuan Fu > > > > Signed-off-by: Jiaxin Wu > > > > --- > > > > .../Include/Library/StandaloneMmDriverEntryPoint.h | 25 > ++++++++++ > > > > .../StandaloneMmDriverEntryPoint.c | 56 > > > > +++++++++++++++++++++- > > > > .../StandaloneMmDriverEntryPoint.inf | 5 +- > > > > 3 files changed, 84 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > > b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > > index 25b2d8d68d..12f7886640 100644 > > > > --- a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > > +++ b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > > @@ -16,10 +16,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > > > /// Declare the PI Specification Revision that this driver requir= es to > > > execute > > > > /// correctly. > > > > /// > > > > extern CONST UINT32 _gMmRevision; > > > > > > > > +/// > > > > +/// Declare the number of unload handler in the image. > > > > +/// > > > > +extern CONST UINT8 > _gDriverUnloadImageCount; > > > > + > > > > /** > > > > The entry point of PE/COFF Image for a Standalone MM Driver. > > > > > > > > This function is the entry point for a Standalone MM Driver. > > > > This function must call ProcessLibraryConstructorList() and > > > > @@ -120,6 +125,26 @@ EFIAPI > > > > ProcessModuleEntryPointList ( > > > > IN EFI_HANDLE ImageHandle, > > > > IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > > ); > > > > > > > > +/** > > > > + Autogenerated function that calls a set of module unload handlers. > > > > + > > > > + This function must be called from the unload handler registered by > > > > _ModuleEntryPoint(). > > > > + This function calls the set of module unload handlers. > > > > + This function is autogenerated by build tools and those build tools > > are > > > > responsible > > > > + for collecting the module unload handlers and calling them in a > > specified > > > > order. > > > > + > > > > + @param ImageHandle The image handle of the DXE Driver, DXE > > > Runtime > > > > Driver, DXE SMM Driver, or UEFI Driver. > > > > + > > > > + @retval EFI_SUCCESS The unload handlers executed normally. > > > > + @retval !EFI_SUCCESS The unload handlers failed to execute > > > normally. > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +ProcessModuleUnloadList ( > > > > + IN EFI_HANDLE ImageHandle > > > > + ); > > > > + > > > > #endif > > > > diff --git > > > > > > > > > > a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.c > > > > > > > > > > b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.c > > > > index 2c41e23a03..d74c9bdfed 100644 > > > > --- > > > > > > > > > > a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.c > > > > +++ > > > > > > > > > > b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.c > > > > @@ -1,23 +1,63 @@ > > > > /** @file > > > > Entry point to a Standalone MM driver. > > > > > > > > -Copyright (c) 2015, Intel Corporation. All rights reserved.
> > > > +Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
> > > > Copyright (c) 2016 - 2018, ARM Ltd. All rights reserved.
> > > > Copyright (c) 2018, Linaro, Limited. All rights reserved.
> > > > > > > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > > > > > **/ > > > > > > > > #include > > > > > > > > +#include > > > > #include > > > > #include > > > > #include > > > > #include > > > > > > > > +/** > > > > + Unloads an image from memory. > > > > + > > > > + This function is a callback that a driver registers to do clean= up > > > > + when the UnloadImage boot service function is called. > > > > + > > > > + @param ImageHandle The handle to the image to unload. > > > > + > > > > + @return Status returned by all unload(). > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +_DriverUnloadHandler ( > > > > + EFI_HANDLE ImageHandle > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + > > > > + // > > > > + // If an UnloadImage() handler is specified, then call it > > > > + // > > > > + Status =3D ProcessModuleUnloadList (ImageHandle); > > > > + > > > > + // > > > > + // If the driver specific unload handler does not return an error, > > then call > > > all > > > > of the > > > > + // library destructors. If the unload handler returned an erro= r, > > then the > > > > driver can not be > > > > + // unloaded, and the library destructors should not be called > > > > + // > > > > + if (!EFI_ERROR (Status)) { > > > > + ProcessLibraryDestructorList (ImageHandle, gMmst); > > > > + } > > > > + > > > > + // > > > > + // Return the status from the driver specific unload handler > > > > + // > > > > + return Status; > > > > +} > > > > + > > > > /** > > > > The entry point of PE/COFF Image for a Standalone MM Driver. > > > > > > > > This function is the entry point for a Standalone MM Driver. > > > > This function must call ProcessLibraryConstructorList() and > > > > @@ -44,10 +84,11 @@ _ModuleEntryPoint ( > > > > IN EFI_HANDLE ImageHandle, > > > > IN IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > > ) > > > > { > > > > EFI_STATUS Status; > > > > + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; > > > > > > > > if (_gMmRevision !=3D 0) { > > > > // > > > > // Make sure that the MM spec revision of the platform > > > > // is >=3D MM spec revision of the driver > > > > @@ -60,10 +101,23 @@ _ModuleEntryPoint ( > > > > // > > > > // Call constructor for all libraries > > > > // > > > > ProcessLibraryConstructorList (ImageHandle, MmSystemTable); > > > > > > > > + // > > > > + // Install unload handler... > > > > + // > > > > + if (_gDriverUnloadImageCount !=3D 0) { > > > > + Status =3D gMmst->MmHandleProtocol ( > > > > + ImageHandle, > > > > + &gEfiLoadedImageProtocolGuid, > > > > + (VOID **)&LoadedImage > > > > + ); > > > > + ASSERT_EFI_ERROR (Status); > > > > + LoadedImage->Unload =3D _DriverUnloadHandler; > > > > + } > > > > + > > > > // > > > > // Call the driver entry point > > > > // > > > > Status =3D ProcessModuleEntryPointList (ImageHandle, > MmSystemTable); > > > > > > > > diff --git > > > > > > > > > > a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.inf > > > > > > > > > > b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.inf > > > > index 2f33a6d4ad..9303566309 100644 > > > > --- > > > > > > > > > > a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.inf > > > > +++ > > > > > > > > > > b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEnt > > > > ryPoint.inf > > > > @@ -1,9 +1,9 @@ > > > > ## @file > > > > # Module entry point library for Standalone MM driver. > > > > # > > > > -# Copyright (c) 2015, Intel Corporation. All rights reserved.
> > > > +# Copyright (c) 2015 - 2021, Intel Corporation. All rights > > reserved.
> > > > # Copyright (c) 2016-2018, ARM Ltd. All rights reserved.
> > > > # Copyright (c) 2018, Linaro, Limited. All rights reserved.
> > > > # > > > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > > > # > > > > @@ -34,5 +34,8 @@ > > > > > > > > [LibraryClasses] > > > > BaseLib > > > > DebugLib > > > > MmServicesTableLib > > > > + > > > > +[Protocols] > > > > + gEfiLoadedImageProtocolGuid ## SOMETIMES_CONSUMES > > > > -- > > > > 2.16.2.windows.1 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >=20 > > > > > > >