I treat the issue in this way:

  1.  Platform Boot Manager library does a good job. It doesn't always call 
RefreshAll() API to auto-create the boot options
  2.  But UiApp doesn't. It constantly call RefreshAll().

Do you think that we can fix UiApp instead? For example, introducing a PCD to 
control the boot option refresh behavior?

Thanks,
Ray

From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Jeff Brasen
Sent: Thursday, November 7, 2019 3:02 PM
To: Ni, Ray <ray...@intel.com>; af...@apple.com
Cc: devel@edk2.groups.io; Ashish Singhal <ashishsin...@nvidia.com>; Laszlo 
Ersek <ler...@redhat.com>; Wang, Jian J <jian.j.w...@intel.com>; Wu, Hao A 
<hao.a...@intel.com>; Gao, Zhichao <zhichao....@intel.com>; Kinney, Michael D 
<michael.d.kin...@intel.com>
Subject: Re: [edk2-devel] [PATCH] Support skipping automatic BM enumeration

The issue is there are some auto created options we do not want on our platform.
Get Outlook for Android<https://aka.ms/ghei36>

________________________________
From: Ni, Ray <ray...@intel.com<mailto:ray...@intel.com>>
Sent: Wednesday, November 6, 2019 11:59:31 PM
To: Jeff Brasen <jbra...@nvidia.com<mailto:jbra...@nvidia.com>>; 
af...@apple.com<mailto:af...@apple.com> 
<af...@apple.com<mailto:af...@apple.com>>
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io> 
<devel@edk2.groups.io<mailto:devel@edk2.groups.io>>; Ashish Singhal 
<ashishsin...@nvidia.com<mailto:ashishsin...@nvidia.com>>; Laszlo Ersek 
<ler...@redhat.com<mailto:ler...@redhat.com>>; Wang, Jian J 
<jian.j.w...@intel.com<mailto:jian.j.w...@intel.com>>; Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>>; Gao, Zhichao 
<zhichao....@intel.com<mailto:zhichao....@intel.com>>; Kinney, Michael D 
<michael.d.kin...@intel.com<mailto:michael.d.kin...@intel.com>>
Subject: RE: [edk2-devel] [PATCH] Support skipping automatic BM enumeration


Jeff,

RefreshAllBootOption() only modifies/creates the auto-created boot options. For 
the boot options created by platform boot manager library, they stay with no 
one touches. And all auto-created boot options are appended in the end of boot 
option list (through BootOrder).



From: Jeff Brasen <jbra...@nvidia.com<mailto:jbra...@nvidia.com>>
Sent: Thursday, November 7, 2019 12:13 PM
To: af...@apple.com<mailto:af...@apple.com>; Ni, Ray 
<ray...@intel.com<mailto:ray...@intel.com>>
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Ashish Singhal 
<ashishsin...@nvidia.com<mailto:ashishsin...@nvidia.com>>; Laszlo Ersek 
<ler...@redhat.com<mailto:ler...@redhat.com>>; Wang, Jian J 
<jian.j.w...@intel.com<mailto:jian.j.w...@intel.com>>; Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>>; Gao, Zhichao 
<zhichao....@intel.com<mailto:zhichao....@intel.com>>; Kinney, Michael D 
<michael.d.kin...@intel.com<mailto:michael.d.kin...@intel.com>>
Subject: RE: [edk2-devel] [PATCH] Support skipping automatic BM enumeration



As the suggestions below made sense, we updated our platform boot manager 
library to behave in this manner and for normal boots everything works well. 
However the UiApp and boot maintenance applications in EDK2 also call 
EfiBootManagerRefreshAllBootOption() when ever a user goes into the menu which 
will re-create the skipped boot options with no place for the platform code to 
intervene.



What about a solution where we add a new Platform library function that allows 
for override of the behavior of BmEnumerateBootOptions? For example, either a 
function or protocol that takes the same parameters as this function and only 
if it returns NULL then we continue to the default enumeration code.  Or a 
function call inserted at the end that would modify the load option array after 
the system does the standard enumeration.



-Jeff



From: af...@apple.com<mailto:af...@apple.com> 
<af...@apple.com<mailto:af...@apple.com>>
Sent: Wednesday, November 6, 2019 9:20 AM
To: Ni, Ray <ray...@intel.com<mailto:ray...@intel.com>>
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Jeff Brasen 
<jbra...@nvidia.com<mailto:jbra...@nvidia.com>>; Ashish Singhal 
<ashishsin...@nvidia.com<mailto:ashishsin...@nvidia.com>>; Laszlo Ersek 
<ler...@redhat.com<mailto:ler...@redhat.com>>; Wang, Jian J 
<jian.j.w...@intel.com<mailto:jian.j.w...@intel.com>>; Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>>; Gao, Zhichao 
<zhichao....@intel.com<mailto:zhichao....@intel.com>>; Mike Kinney 
<michael.d.kin...@intel.com<mailto:michael.d.kin...@intel.com>>
Subject: Re: [edk2-devel] [PATCH] Support skipping automatic BM enumeration



Ray,



Is there an obvious hook point we could point Jeff and Ashish at?



Long term it would be a good idea to have a Wiki page to give some guidance on 
how to customize the BDS.



Thanks,



Andrew Fish



On Nov 5, 2019, at 9:20 PM, Ni, Ray <ray...@intel.com<mailto:ray...@intel.com>> 
wrote:



Andrew,

I agree with your opinion.

It's expected that Platform Boot Manager lib calls 
EfiBootManagerRefreshAllBootOption() only in full configuration boot path.

The full configuration boot path is chosen when hardware changes happen. So 
it's not expected EfiBootManagerRefresh...() be
called in every boot.

So you could:

  1.  Delete the auto-created option pointing to LoadFile instance
  2.  Create your own one with customized description.





From: af...@apple.com<mailto:af...@apple.com> 
<af...@apple.com<mailto:af...@apple.com>>
Sent: Wednesday, November 6, 2019 10:47 AM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; 
jbra...@nvidia.com<mailto:jbra...@nvidia.com>
Cc: Ashish Singhal <ashishsin...@nvidia.com<mailto:ashishsin...@nvidia.com>>; 
Laszlo Ersek <ler...@redhat.com<mailto:ler...@redhat.com>>; Ni, Ray 
<ray...@intel.com<mailto:ray...@intel.com>>; Wang, Jian J 
<jian.j.w...@intel.com<mailto:jian.j.w...@intel.com>>; Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>>; Gao, Zhichao 
<zhichao....@intel.com<mailto:zhichao....@intel.com>>; Kinney, Michael D 
<michael.d.kin...@intel.com<mailto:michael.d.kin...@intel.com>>
Subject: Re: [edk2-devel] [PATCH] Support skipping automatic BM enumeration







On Nov 5, 2019, at 7:34 PM, Jeff Brasen 
<jbra...@nvidia.com<mailto:jbra...@nvidia.com>> wrote:



Wouldn't having a variable that we create and delete on every boot put 
unnecessary stress on the SPI-NOR that the variable store lives on?
What about the alternative approach where we allow the platform code to modify 
the attributes of the auto created variable to disable it with hidden/!active 
but still match for detection purposes so that it doesn't delete and recreate 
the modified variable each boot? That way all the logic on what to disable can 
still be in the platform code and all the existing logic in the boot manager 
can stay basically the same?

What changes every boot that forces the variable to need to get modified?

I would assume the NOR driver is smart enough to not update a variable that is 
not changing.

The custom BDS could could only create the variable for this device if it does 
not exist.

[JB] The current flow with no changes in the boot manager would be as follows



  1.  Scan for instance of the boot option in the variables
  2.  It will not be found, so create a new boot option store it to a variable 
and update BootOrder
  3.  Platform code runs creates the options for the boot option it wants and 
writes those to variable store
  4.  Delete/disable the boot option in the variable store



When you reboot it won't find the variable so 1/2/4 will re-occur



The code that does this (1/2) is EfiBootManagerRefreshAllBootOption in BmBoot.c



If you modify the variable to disable it with hidden/not active it would delete 
that and create a new one as well as the code wouldn't recognize that is the 
same boot option.



If however we modify EfiBootManagerFindLoadOption to not compare the attributes 
(at least allow for differences in active and hidden) then the when it 
refreshes every thing it would see the match and not delete/create a new 
variable in the store and thus we wouldn't have changes every boot.





Jeff,



Sorry if I'm a little off on the sequence of things as the platform I work on 
day to day has a custom BDS and does not use this library..... I though the 
patch changed BmEnumerateBootOptions(), so that is going to change how 
EfiBootManagerRefreshAllBootOption() works. I'd also point out the patch as 
given is invalid as it changed the behavior of the public library API for 
EfiBootManagerRefreshAllBootOption() [1] so for the patch to be valid it would 
need to change the comments to reflect the new behavior. This is kind of what 
Laszlo's technical debt comment was about.



I think Laszlo advocated having the BDS platform specific code make sure the 
boot variables are in the correct state. That should happen before the Boot 
Manager code runs, and it is  not clear to me why the Boot Manager could would 
need to run if you have a valid EFI nvram variable to boot from.



I think the question is how is your use case different than the boot variable 
that Windows installs? If it works kind of the same way then the answer is to 
have the BDS platform specific code write the boot variable.





[1]

/**

  The function creates boot options for all possible bootable medias in the 
following order:

  1. Removable BlockIo            - The boot option only points to the 
removable media

                                    device, like USB key, DVD, Floppy etc.

  2. Fixed BlockIo                - The boot option only points to a Fixed 
blockIo device,

                                    like HardDisk.

  3. Non-BlockIo SimpleFileSystem - The boot option points to a device 
supporting

                                    SimpleFileSystem Protocol, but not 
supporting BlockIo

                                    protocol.

  4. LoadFile                     - The boot option points to the media 
supporting

                                    LoadFile protocol.

  Reference: UEFI Spec chapter 3.3 Boot Option Variables Default Boot Behavior



  The function won't delete the boot option not added by itself.

**/

VOID

EFIAPI

EfiBootManagerRefreshAllBootOption (

  VOID

  );



Thanks,



Andrew Fish



Thanks,

Andrew Fish

Thanks,

Jeff

________________________________

This email message is for the sole use of the intended recipient(s) and may 
contain confidential information.  Any unauthorized review, use, disclosure or 
distribution is prohibited.  If you are not the intended recipient, please 
contact the sender by reply email and destroy all copies of the original 
message.

________________________________




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#50184): https://edk2.groups.io/g/devel/message/50184
Mute This Topic: https://groups.io/mt/39747302/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to