On 25 June 2015 at 12:32, Laszlo Ersek <ler...@redhat.com> wrote:
> comments below
>
> On 06/25/15 10:19, Ard Biesheuvel wrote:
>> Currently, the ArmVirtPkg platforms built with the Intel BDS fail
>> to signal the end-of-DXE event 'gEfiEndOfDxeEventGroupGuid' when
>> entering the BDS phase, which results in some loss of functionality,
>> i.e., variable reclaim in the VariableDxe drivers, and the splitting
>> of the memory regions that is part of the recently added UEFI 2.5
>> properties table feature.
>>
>> As discussed on the edk2-devel mailing list here:
>>
>> http://thread.gmane.org/gmane.comp.bios.tianocore.devel/16088/focus=16109
>>
>> it is up to the platform BDS to signal that event, since there may be
>> platform specific ordering constraints with respect to the signalling
>> of the event that are difficult to honor at the generic level.
>>
>> So add the SignalEvent () call to PlatformBdsInit () of ArmVirtPkg's
>> PlatformBdsLib implementation for the Intel BDS.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> ---
>>  .../Library/PlatformIntelBdsLib/IntelBdsPlatform.c | 34 
>> ++++++++++++++++++++++
>>  .../PlatformIntelBdsLib/PlatformIntelBdsLib.inf    |  1 +
>>  2 files changed, 35 insertions(+)
>>
>> diff --git a/ArmVirtPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c 
>> b/ArmVirtPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> index 499cce5dcde6..983a92e192b7 100644
>> --- a/ArmVirtPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> +++ b/ArmVirtPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> @@ -24,6 +24,7 @@
>>  #include <Protocol/GraphicsOutput.h>
>>  #include <Protocol/PciIo.h>
>>  #include <Protocol/PciRootBridgeIo.h>
>> +#include <Guid/EventGroup.h>
>>
>>  #include "IntelBdsPlatform.h"
>>
>> @@ -118,6 +119,22 @@ STATIC PLATFORM_USB_KEYBOARD mUsbKeyboard = {
>>    }
>>  };
>>
>> +/**
>> +  An empty function to pass error checking of CreateEventEx ().
>> +
>> +  @param  Event                 Event whose notification function is being 
>> invoked.
>> +  @param  Context               Pointer to the notification function's 
>> context,
>> +                                which is implementation-dependent.
>> +
>> +**/
>> +VOID
>> +EFIAPI
>> +EmptyCallbackFunction (
>> +  IN EFI_EVENT                Event,
>> +  IN VOID                     *Context
>> +  )
>> +{
>> +}
>
> I'd prefer STATIC.
>

OK.

> In addition: although I can't tell off the top of my head how other
> callbacks behave for this event exactly, I'd prefer if you actually
> closed down the event in the callback. (That's a valid thing to do; it
> unregisters the callback and releases all related resources.)
>

I copy-pasted the whole thing, which kind of answers your question :-)

I was surprised to see that you need to subscribe to an event in order
to be able to signal it, but that's something I can live with.

>>
>>  //
>>  // BDS Platform Functions
>> @@ -133,6 +150,23 @@ PlatformBdsInit (
>>    VOID
>>    )
>>  {
>> +  EFI_EVENT           EndOfDxeEvent;
>> +  EFI_STATUS          Status;
>> +
>> +  //
>> +  // Signal EndOfDxe PI Event
>> +  //
>> +  Status = gBS->CreateEventEx (
>> +      EVT_NOTIFY_SIGNAL,
>> +      TPL_NOTIFY,
>
> TPL_CALLBACK is sufficient, and more "friendly". (Unless, of course, I'm
> contradicting the revelant specs.) I usually like to go with the "least
> urgent" task priority level that serves my needs.
>

I will use MdePkg/Library/UefiLib/UefiNotTiano.c as an example, and
indeed use TPL_CALLBACK, and close the event (but not from the
callback)

>> +      EmptyCallbackFunction,
>> +      NULL,
>> +      &gEfiEndOfDxeEventGroupGuid,
>> +      &EndOfDxeEvent
>> +      );
>
> The arguments and the closing paren should be indented so they line up
> with the "e" in Cr[e]ateEventEx.
>

OK

>> +  if (!EFI_ERROR (Status)) {
>> +    gBS->SignalEvent (EndOfDxeEvent);
>> +  }
>>  }
>>
>>
>> diff --git a/ArmVirtPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf 
>> b/ArmVirtPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> index d8f892642c2e..d9982167e81d 100644
>> --- a/ArmVirtPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> +++ b/ArmVirtPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> @@ -65,6 +65,7 @@ [Guids]
>>    gEfiFileInfoGuid
>>    gEfiFileSystemInfoGuid
>>    gEfiFileSystemVolumeLabelInfoIdGuid
>> +  gEfiEndOfDxeEventGroupGuid
>>
>>  [Protocols]
>>    gEfiDevicePathProtocolGuid
>>
>
> I apologize if I should have / could have pointed out all this earlier.
> Kinda chaotic around here. :(
>

No worries, same here ...

-- 
Ard.

------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to