From: "Andrew Fish" <afish@apple.com>
To: devel@edk2.groups.io, jbrasen@nvidia.com
Cc: Ashish Singhal <ashishsingha@nvidia.com>,
Laszlo Ersek <lersek@redhat.com>, "Ni, Ray" <ray.ni@intel.com>,
"Wang, Jian J" <jian.j.wang@intel.com>,
"Wu, Hao A" <hao.a.wu@intel.com>,
"Gao, Zhichao" <zhichao.gao@intel.com>,
Mike Kinney <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [PATCH] Support skipping automatic BM enumeration
Date: Tue, 05 Nov 2019 20:47:20 -0600 [thread overview]
Message-ID: <746A8D5E-DC45-4D39-9C4D-97A10BE2E0B0@apple.com> (raw)
In-Reply-To: <BYAPR12MB346238204D93AE9FD588F0D6CB790@BYAPR12MB3462.namprd12.prod.outlook.com>
[-- Attachment #1: Type: text/plain, Size: 4503 bytes --]
> On Nov 5, 2019, at 7:34 PM, Jeff Brasen <jbrasen@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
>
> Scan for instance of the boot option in the variables
> It will not be found, so create a new boot option store it to a variable and update BootOrder
> Platform code runs creates the options for the boot option it wants and writes those to variable store
> 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.
>
[-- Attachment #2: Type: text/html, Size: 9510 bytes --]
next prev parent reply other threads:[~2019-11-06 2:47 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-30 3:47 [PATCH] Support skipping automatic BM enumeration Ashish Singhal
2019-10-30 3:47 ` [PATCH] MdeModulePkg/UefiBootManagerLib: Support skipping " Ashish Singhal
2019-10-31 10:14 ` [edk2-devel] [PATCH] Support skipping automatic " Laszlo Ersek
[not found] ` <DM6PR12MB33249A87560B32B0155D4FE0BA630@DM6PR12MB3324.namprd12.prod.outlook.com>
2019-11-01 21:42 ` Laszlo Ersek
2019-11-01 22:05 ` Ashish Singhal
2019-11-01 22:57 ` Laszlo Ersek
2019-11-04 17:51 ` Ashish Singhal
2019-11-05 2:42 ` Ni, Ray
2019-11-05 3:24 ` Ashish Singhal
2019-11-05 5:00 ` Andrew Fish
2019-11-05 5:06 ` Ashish Singhal
2019-11-05 5:21 ` Andrew Fish
2019-11-05 5:42 ` Ashish Singhal
2019-11-05 6:15 ` Andrew Fish
2019-11-05 9:54 ` Laszlo Ersek
2019-11-05 16:52 ` Andrew Fish
2019-11-05 18:00 ` Ashish Singhal
2019-11-05 19:23 ` Laszlo Ersek
2019-11-05 23:19 ` Jeff Brasen
2019-11-06 0:20 ` Andrew Fish
2019-11-06 9:56 ` Laszlo Ersek
2019-11-06 16:15 ` Andrew Fish
2019-11-06 19:58 ` Laszlo Ersek
2019-11-06 1:07 ` Ashish Singhal
2019-11-06 1:34 ` Jeff Brasen
2019-11-06 2:47 ` Andrew Fish [this message]
2019-11-06 3:20 ` Ni, Ray
2019-11-06 16:19 ` Andrew Fish
2019-11-07 4:12 ` Jeff Brasen
2019-11-07 6:59 ` Ni, Ray
2019-11-07 7:02 ` Jeff Brasen
2019-11-07 7:21 ` Ni, Ray
2019-11-07 17:46 ` Jeff Brasen
2019-11-08 16:37 ` Laszlo Ersek
2019-11-11 22:57 ` Jeff Brasen
2019-11-11 23:58 ` Ni, Ray
2019-11-12 0:00 ` Jeff Brasen
2019-11-13 18:42 ` Jeff Brasen
2019-11-14 2:09 ` Ni, Ray
2019-11-14 17:04 ` Jeff Brasen
2019-12-10 20:46 ` Jeff Brasen
2019-12-11 9:54 ` [edk2-discuss] " Wang, Sunny (HPS SW)
2019-12-11 14:00 ` Ni, Ray
2019-12-12 17:52 ` Jeff Brasen
2019-12-17 20:15 ` Ashish Singhal
2019-12-18 3:54 ` [edk2-discuss] " Wang, Sunny (HPS SW)
2019-12-18 8:43 ` Ni, Ray
2019-11-07 7:01 ` Ni, Ray
2019-11-05 9:33 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=746A8D5E-DC45-4D39-9C4D-97A10BE2E0B0@apple.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox