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.


Thanks,
Star
-----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

Reply via email to