Hi,
when the BootOrder variable doesn't exist (for example, during the very
first boot of an OVMF platform), the following ASSERT() triggers:
ASSERT_EFI_ERROR (Status = Not Found)
ASSERT .../IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c(636):
!EFI_ERROR
This comes from
BdsLibEnumerateAllBootOption()
REFRESH_LEGACY_BOOT_OPTIONS
BdsDeleteAllInvalidLegacyBootOptions()
The last function listed above calls
BdsLibGetVariableAndSize(L"BootOrder", ...). Since the "BootOrder" nvvar
doesn't exist (the variable store is completely empty), BootOrderSize is
set to zero, and BootOrder (the buffer) is set to NULL.
Hence the subsequent loop is skipped in full, and we reach
//
// Adjust the number of boot options.
//
Status = gRT->SetVariable (
L"BootOrder",
&gEfiGlobalVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
| EFI_VARIABLE_NON_VOLATILE,
BootOrderSize,
BootOrder
);
//
// Shrinking variable with existing variable implementation shouldn't fail.
//
ASSERT_EFI_ERROR (Status);
The BootOrderSize==0 argument here, in combination with the used
Attributes, amounts to a variable deletion request. Which fails, because
the variable didn't exist in the first place:
EFI_NOT_FOUND -- The variable trying to be updated or deleted was not
found.
This triggers the ASSERT().
Thanks
Laszlo
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos. Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel