Bret, How does that test work? Does it make a custom FDF file?
Thanks, Andrew Fish > On May 7, 2020, at 9:45 AM, Bret Barkelew via groups.io > <bret.barkelew=microsoft....@groups.io> wrote: > > I know I’ve also seen tests that randomize the driver dispatch order to try > to catch these “implementation-specific” edge cases. Perhaps we could > instrument something similar with a weekly OVMF CI test? > > - Bret > > From: Andrew Fish via groups.io <mailto:afish=apple....@groups.io> > Sent: Thursday, May 7, 2020 9:43 AM > To: devel@edk2.groups.io <mailto:devel@edk2.groups.io>; Ard Biesheuvel > <mailto:ard.biesheu...@arm.com> > Cc: Daniel Schaefer <mailto:daniel.schae...@hpe.com>; Chang, Abner (HPS SW/FW > Technologist) <mailto:abner.ch...@hpe.com>; Atish Patra > <mailto:ati...@atishpatra.org>; Heinrich Schuchardt > <mailto:xypron.g...@gmx.de>; Atish Patra <mailto:atish.pa...@wdc.com>; > Alexander Graf <mailto:ag...@csgraf.de>; Anup Patel > <mailto:anup.pa...@wdc.com>; l...@nuviainc.com <mailto:l...@nuviainc.com>; > Jordan Justen <mailto:jordan.l.jus...@intel.com>; Laszlo Ersek > <mailto:ler...@redhat.com> > Subject: [EXTERNAL] Re: [edk2-devel] APRIORI in RISC-V or Where did OVMF > APRIORIs come from? > > > > > On May 7, 2020, at 6:53 AM, Ard Biesheuvel <ard.biesheu...@arm.com > <mailto:ard.biesheu...@arm.com>> wrote: > > (+ Laszlo) > > On 5/7/20 3:43 PM, Daniel Schaefer wrote: > > On 5/7/20 3:24 PM, Ard Biesheuvel wrote: > > On 5/7/20 3:18 PM, Daniel Schaefer via groups.io > <https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgroups.io%2F&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C55cf729cb7f2493df70508d7f2a5b761%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244665879150410&sdata=3m1H%2BjDxdT258g641hJMpIXoSR3C7EmkGo3fpkZhVgw%3D&reserved=0> > wrote: > > Hi Ard and others, > > TLDR; We have APRIORI definitions from other places in EDK2 but there's no > explanation as to why they are there. > > I'm taking this to the EDK2 list, since it doesn't concern U-Boot. > I kept some other people related to UEFI, maybe you're interested ;) > > On 2/25/20 10:07 AM, Ard Biesheuvel wrote: > > What I did notice is the use of APRIORI PEI and APRIORI DXE sections > > in your platform descriptions. I recommend you try to avoid that, as > > it is a maintenance burden going forward: instead, please use dummy > > protocols and NULL library class resolutions if you need to make > > generic components depend on platform specific protocols. Also, please > > document this - the APRIORI section does not explain *why* you have to > > circumvent the ordinary dependency tree based module dispatch. > > I'm taking a look at this right now. > You're absolutely right - we should reduce or document APRIORIs. > > However, Abner told me that he had only copied most of the FDF from other > places in EDK2.This is what we currently have: > > APRIORI PEI { > INF > MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf > > INF MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf > INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf > } > APRIORI DXE { > INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf > INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf > INF > Platform/SiFive/U5SeriesPkg/Universal/Dxe/RamFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf > > } > > I can remove all of APRIORI PEI and it boots properly. Of the DXEs I can only > remove FvbServicesRuntimeDxe, otherwise some DXEs are dispatched in the wrong > order and boot fails. > > This means some modules have an undeclared dependency on one of the remaining > modules. Can you elaborate on how the boot fails in this case? > > The error is > ASSERT [FvbServicesRuntimeDxe] > /edk2/MdePkg/Library/DxePcdLib/DxePcdLib.c(72): !EFI_ERROR (Status) > In this line, DxePcdLib tries to consume gPcdProtocolGuid. Therefor if I add > the following to FvbServicesRuntimeDxe.inf: > [Depex] > gEfiPcdProtocolGuid > [Protocols] > gPcdProtocolGuid ## SOMETIMES_CONSUMES > gEfiPcdProtocolGuid ## CONSUMES > gGetPcdInfoProtocolGuid ## SOMETIMES_CONSUMES > gEfiGetPcdInfoProtocolGuid ## SOMETIMES_CONSUMES > I can boot without error. > Looking at MdePkg/Library/DxePcdLib/DxePcdLib.inf I see that the library has > exactly the same Depex and Protocols specified. Do DXEs have re-specify them? > If yes, of what use is it to declare them for the library? Documentation only? > > No this is unexpected. If the PcdLib dependency of FvbServicesRuntimeDxe.inf > resolves to MdePkg/Library/DxePcdLib/DxePcdLib.inf, it should inherit the > depex and the protocol dependencies. > > > Could be the dreaded my INF is wrong but it compiles issue. What happens is > dependencies in the INF are missing but get resolved by the library instances > or even worse libraries pulled in by the libraries. So it looks to me like it > is a missing Depex in the driver. Not all instances of the library, that are > valid for the module, imply the dependency. > > /Volumes/Case/edk2(master)>git grep PcdLib -- *.inf | grep LIBRARY_CLASS > MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf:21: LIBRARY_CLASS > = PcdLib > MdePkg/Library/DxePcdLib/DxePcdLib.inf:35: LIBRARY_CLASS = > PcdLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER SMM_CORE > UEFI_APPLICATION UEFI_DRIVER > MdePkg/Library/PeiPcdLib/PeiPcdLib.inf:32: LIBRARY_CLASS = > PcdLib|PEIM PEI_CORE SEC > > > The easiest way to debug these kind of problems is to generate a report file > by passing `-y REPORTFILE` to build. For my projects I usually always build a > report file and dump it into the Build results directory. This will show what > libraries got linked in, and what the actual dependency expression resolved > to. > > > > Should I/we try to remove the APRIORI entries from OVMF in a similar way? > > Let's get to the bottom of this first. Laszlo may remember why exactly those > entries are there in the first place, and I suspect it is a different issue. > > > It is good to get the history. In general the APRIORI files are used to force > a dispatch order for debugging, like getting status codes or serial output > quicker. > > From an architectural point of view the dispatch order is only defined as "if > your Depex is TRUE you can be dispatched". So they APRORI file lets you > define the undefined behavior. The implementation happens to walk the FV in > order and will dispatch and drivers with a Depex of TRUE and keep iterating > until all the Depex'es are TRUE or all the drivers dispatch. In the "good old > days" we would sort the PEIMs in dispatch order so that everything would > dispatch on the 1st pass to reduce the number of slow FLASH reads required to > boot. > > Thanks, > > Andrew Fish > > > > > > <3C121AAE0A3549E984277926BF20E545.png> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58799): https://edk2.groups.io/g/devel/message/58799 Mute This Topic: https://groups.io/mt/74054955/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-