On 11/07/19 18:46, Jeff Brasen wrote:
> Fixing UiApp seems reasonable, I do think we would want a hook to the 
> platform library in here as the enumeration that occurs in the UiApp is 
> intended to do a full enumeration of the system and there may be platform 
> specifics to how that occurs.

Fully agreed -- entering UiApp should expose everything bootable in the
system, unless (perhaps) PlatformBootManagerLib specifically thinks
otherwise.

Of course, then we arrive (again) at the problem that a call in
UefiBootManagerLib, to a *new* PlatformBootManagerLib API, will break
tens of out-of-tree platforms. :)

I think that can be prevented, as follows; but it will take quite some time:

- introduce the new function declaration in "PlatformBootManagerLib.h",
- modify all platforms (in tree and out of tree) to implement (define)
the new function,
- call the new function from UefiBootManagerLib

For some history / background on this kind of problem, I suggest reading
through:

  https://bugzilla.tianocore.org/show_bug.cgi?id=982

Thanks,
Laszlo

> From: Ni, Ray <ray...@intel.com>
> Sent: Thursday, November 7, 2019 12:21 AM
> To: devel@edk2.groups.io; Jeff Brasen <jbra...@nvidia.com>; af...@apple.com
> Cc: 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
> 
> 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<mailto:devel@edk2.groups.io> 
> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Jeff Brasen
> Sent: Thursday, November 7, 2019 3:02 PM
> To: Ni, Ray <ray...@intel.com<mailto:ray...@intel.com>>; 
> af...@apple.com<mailto:af...@apple.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
> 
> 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 (#50307): https://edk2.groups.io/g/devel/message/50307
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