On 19 October 2018 at 12:48, Zeng, Star <star.z...@intel.com> wrote: > Ok, thanks and got the case. > > DxeCapsuleLibVirtualAddressChangeEvent may be too late as it could not > allocate pool to do caching. > I meant registering gEfiSystemResourceTableGuid event group > notification(installconfigurationtable will trigger event group) and do > caching in the notification function. > >
OK, I will create a bugzilla for this. > -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: Friday, October 19, 2018 12:43 PM > To: Zeng, Star <star.z...@intel.com> > Cc: Peter Jones <pjo...@redhat.com>; edk2-devel@lists.01.org; Dong, Eric > <eric.d...@intel.com>; Leif Lindholm <leif.lindh...@linaro.org>; Kinney, > Michael D <michael.d.kin...@intel.com>; Yao, Jiewen <jiewen....@intel.com> > Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from > RtServicesData memory > > On 19 October 2018 at 12:39, Zeng, Star <star.z...@intel.com> wrote: >> Ard, >> >> What is the real case you met that has firmware to access ESRT configuration >> table at runtime? >> > > When called from the OS, UpdateCapsule() crashes when IsFmpCapsule() is > invoked, because it attempts to access the ESRT. The driver uses > ConvertPointer() for the address and does not check the return value, so it > does not notice the failure. > >> I am thinking about a possible solution with current situation. >> The consumer can cache ESRT configuration table by a >> gEfiSystemResourceTableGuid even group notification. >> > > Yes, so you are saying DxeCapsuleLibVirtualAddressChangeEvent () in > DxeCapsuleLibFmp/DxeCapsuleRuntime.c should cache the entire table rather > than get the address? I suppose that should work. > > >> -----Original Message----- >> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] >> Sent: Friday, October 19, 2018 11:48 AM >> To: Zeng, Star <star.z...@intel.com>; Peter Jones <pjo...@redhat.com> >> Cc: edk2-devel@lists.01.org; Dong, Eric <eric.d...@intel.com>; Leif >> Lindholm <leif.lindh...@linaro.org>; Kinney, Michael D >> <michael.d.kin...@intel.com>; Yao, Jiewen <jiewen....@intel.com> >> Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from >> RtServicesData memory >> >> (+ Peter) >> >> On 19 October 2018 at 11:46, Zeng, Star <star.z...@intel.com> wrote: >>> Hi Ard, >>> >>> Thanks for the patch. >>> >>> Cc more people who knows ESRT. >>> >>> UEFI 2.7 chapter 23.3: >>> The ESRT shall be stored in memory of type EfiBootServicesData. >>> >>> Seeming, we need update UEFI spec if firmware really needs access ESRT >>> configuration table at runtime. >>> >>> >>> Thanks, >>> Star >>> -----Original Message----- >>> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] >>> Sent: Friday, October 19, 2018 11:25 AM >>> To: edk2-devel@lists.01.org >>> Cc: Zeng, Star <star.z...@intel.com>; Dong, Eric >>> <eric.d...@intel.com>; Leif Lindholm <leif.lindh...@linaro.org>; Ard >>> Biesheuvel <ard.biesheu...@linaro.org> >>> Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from >>> RtServicesData memory >>> >>> On 19 October 2018 at 10:54, Ard Biesheuvel <ard.biesheu...@linaro.org> >>> wrote: >>>> Given that the firmware itself may access the ESRT table when the OS >>>> invokes the UpdateCapsule () boot service, >>> >>> *runtime* service >>> >>>> it requires a virtual mapping >>>> and so it needs to be allocated from RtServicesData memory. >>>> >>>> Contributed-under: TianoCore Contribution Agreement 1.1 >>>> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org> >>>> --- >>>> MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c | 3 ++- >>>> 1 file changed, 2 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c >>>> b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c >>>> index cab8d69e35ad..66266a44cec9 100644 >>>> --- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c >>>> +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c >>>> @@ -577,7 +577,8 @@ EsrtReadyToBootEventNotify ( >>>> goto EXIT; >>>> } >>>> >>>> - EsrtTable = AllocatePool(sizeof(EFI_SYSTEM_RESOURCE_TABLE) + >>>> NonFmpRepositorySize + FmpRepositorySize); >>>> + EsrtTable = AllocateRuntimePool (sizeof(EFI_SYSTEM_RESOURCE_TABLE) + >>>> + NonFmpRepositorySize + >>>> + FmpRepositorySize); >>>> if (EsrtTable == NULL) { >>>> DEBUG ((EFI_D_ERROR, "Esrt table memory allocation failure\n")); >>>> goto EXIT; >>>> -- >>>> 2.17.1 >>>> _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel