Reviewed-by: Siyuan Fu <siyuan...@intel.com> > -----Original Message----- > From: Rabeda, Maciej <maciej.rab...@intel.com> > Sent: 2019年10月14日 20:37 > To: devel@edk2.groups.io > Cc: Fu, Siyuan <siyuan...@intel.com>; Wu, Jiaxin <jiaxin...@intel.com> > Subject: [PATCH v2 1/1] NetworkPkg/SnpDxe: Remove ExitBootServices > event > > Patch addresses Bugzilla #1972. > During ExitBootServices stage, drivers should not call any > functions known to use Memory Allocation Services. One of such > functions (as per UEFI spec) is UNDI->Shutdown(). > > Since UNDI drivers during ExitBootServices phase are expected > to put the adapter to such a state that it will not perform any DMA > operations, there is no need to interface UNDI by SNP driver during > that phase. > > Finally, since ExitBootServices event notification function in SNP > only calls UNDI->Shutdown() and Stop() functions, there is no need > to create this event at all. Adding PCD to control creation of event > reacting to ExitBootServices() call so that systems with UNDIs relying > on SNP to call their Shutdown() and Stop() can still work. > > Signed-off-by: Maciej Rabeda <maciej.rab...@intel.com> > Cc: Siyuan Fu <siyuan...@intel.com> > Cc: Jiaxin Wu <jiaxin...@intel.com> > --- > > Notes: > v2: > - modified commit message > - added PCD to control ExitBootServices() creation event in SnpDxe > > NetworkPkg/SnpDxe/Snp.c | 38 +++++++++++--------- > NetworkPkg/NetworkPkg.dec | 7 ++++ > NetworkPkg/SnpDxe/Snp.h | 1 + > NetworkPkg/SnpDxe/SnpDxe.inf | 3 ++ > 4 files changed, 32 insertions(+), 17 deletions(-) > > diff --git a/NetworkPkg/SnpDxe/Snp.c b/NetworkPkg/SnpDxe/Snp.c > index a23af05078bc..03317ffa26f1 100644 > --- a/NetworkPkg/SnpDxe/Snp.c > +++ b/NetworkPkg/SnpDxe/Snp.c > @@ -647,19 +647,21 @@ SimpleNetworkDriverStart ( > PxeShutdown (Snp); > PxeStop (Snp); > > - // > - // Create EXIT_BOOT_SERIVES Event > - // > - Status = gBS->CreateEventEx ( > - EVT_NOTIFY_SIGNAL, > - TPL_NOTIFY, > - SnpNotifyExitBootServices, > - Snp, > - &gEfiEventExitBootServicesGuid, > - &Snp->ExitBootServicesEvent > - ); > - if (EFI_ERROR (Status)) { > - goto Error_DeleteSNP; > + if (FixedPcdGetBool (PcdSnpCreateExitBootServicesEvent)) { > + // > + // Create EXIT_BOOT_SERIVES Event > + // > + Status = gBS->CreateEventEx ( > + EVT_NOTIFY_SIGNAL, > + TPL_NOTIFY, > + SnpNotifyExitBootServices, > + Snp, > + &gEfiEventExitBootServicesGuid, > + &Snp->ExitBootServicesEvent > + ); > + if (EFI_ERROR (Status)) { > + goto Error_DeleteSNP; > + } > } > > // > @@ -778,10 +780,12 @@ SimpleNetworkDriverStop ( > return Status; > } > > - // > - // Close EXIT_BOOT_SERIVES Event > - // > - gBS->CloseEvent (Snp->ExitBootServicesEvent); > + if (FixedPcdGetBool (PcdSnpCreateExitBootServicesEvent)) { > + // > + // Close EXIT_BOOT_SERIVES Event > + // > + gBS->CloseEvent (Snp->ExitBootServicesEvent); > + } > > Status = gBS->CloseProtocol ( > Controller, > diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec > index 944b1d1501c0..66e500cbeaf7 100644 > --- a/NetworkPkg/NetworkPkg.dec > +++ b/NetworkPkg/NetworkPkg.dec > @@ -109,6 +109,13 @@ > # @Prompt TFTP block size. > > gEfiNetworkPkgTokenSpaceGuid.PcdTftpBlockSize|0x0|UINT64|0x1000000B > > + ## Indicates whether SnpDxe driver will create an event that will be > notified > + # upon gBS->ExitBootServices() call. > + # TRUE - Event being triggered upon ExitBootServices call will be created > + # FALSE - Event being triggered upon ExitBootServices call will NOT be > created > + # @Prompt Indicates whether SnpDxe creates event for ExitBootServices() > call. > + > gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent|TRUE| > BOOLEAN|0x1000000C > + > [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] > ## IPv6 DHCP Unique Identifier (DUID) Type configuration (From RFCs 3315 > and 6355). > # 01 = DUID Based on Link-layer Address Plus Time [DUID-LLT] > diff --git a/NetworkPkg/SnpDxe/Snp.h b/NetworkPkg/SnpDxe/Snp.h > index e6b62930397d..4f64c525e357 100644 > --- a/NetworkPkg/SnpDxe/Snp.h > +++ b/NetworkPkg/SnpDxe/Snp.h > @@ -26,6 +26,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <Library/UefiLib.h> > #include <Library/MemoryAllocationLib.h> > #include <Library/PrintLib.h> > +#include <Library/PcdLib.h> > > #include <IndustryStandard/Pci.h> > #include <IndustryStandard/Acpi.h> > diff --git a/NetworkPkg/SnpDxe/SnpDxe.inf > b/NetworkPkg/SnpDxe/SnpDxe.inf > index afeb1526cc10..79ea789c0837 100644 > --- a/NetworkPkg/SnpDxe/SnpDxe.inf > +++ b/NetworkPkg/SnpDxe/SnpDxe.inf > @@ -73,5 +73,8 @@ > gEfiNetworkInterfaceIdentifierProtocolGuid_31 ## TO_START > gEfiPciIoProtocolGuid ## TO_START > > +[Pcd] > + gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent ## > CONSUMES > + > [UserExtensions.TianoCore."ExtraFiles"] > SnpDxeExtra.uni > -- > 2.17.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#49270): https://edk2.groups.io/g/devel/message/49270 Mute This Topic: https://groups.io/mt/34532713/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-