[PATCH 04/16] event: add event to notify lmb memory map changes
Heinrich Schuchardt
xypron.glpk at gmx.de
Thu Sep 26 15:13:51 CEST 2024
On 26.09.24 14:58, Ilias Apalodimas wrote:
> Hi Heinrich,
>
> On Sat, 14 Sept 2024 at 18:08, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On 9/5/24 10:27, Sughosh Ganu wrote:
>>> Add an event which would be used for notifying changes in the
>>> LMB modules' memory map. This is to be used for having a
>>> synchronous view of the memory that is currently in use, and that is
>>> available for allocations.
>>
>> The synchronous view problem only exists because we are duplicating
>> data. Store the EFI memory type in LMB and the problem vanishes.
>
> We could, but I wonder if that would be enough.
> Apart from the EFI memory types, we plan on fixing the EFI memory
> attributes. I'll go read the spec again and take look at EDK2 but
> IIRC, you can't correlate memory types to memory attributes (at least
> not for all of them).
>
> If that's true we'll also need the attributes in LMB + perhaps logic
> for 64kb page size OSes and 4KB page firmware, which might be a bit
> too much. In that case, I think the sync is fine, but I really don't
> see the point of making an event out of it. Perhaps we could just
> update the efi memory map directly from LMB.
Yes, memory attributes should be stored in LMB too if UEFI is enabled.
I would suggest:
* GetMemoryMap() calls into LMB to generate the map on the fly.
* The EFI_MEMORY_ATTRIBUTES_TABLE is generated from LMB information.
* The EFI_MEMORY_ATTRIBUTE_PROTOCOL calls into LMB.
Best regards
Heinrich
>
> Thanks
> /Ilias
>>
>> The event is only needed to notify EFI_EVENT_GROUP_MEMORY_MAP_CHANGE.
>>
>> Best regards
>>
>> Heinrich
>>
>>>
>>> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
>>> ---
>>> common/event.c | 2 ++
>>> include/event.h | 14 ++++++++++++++
>>> 2 files changed, 16 insertions(+)
>>>
>>> diff --git a/common/event.c b/common/event.c
>>> index dda569d447..fc8002603c 100644
>>> --- a/common/event.c
>>> +++ b/common/event.c
>>> @@ -48,6 +48,8 @@ const char *const type_name[] = {
>>>
>>> /* main loop events */
>>> "main_loop",
>>> +
>>> + "lmb_map_update",
>>> };
>>>
>>> _Static_assert(ARRAY_SIZE(type_name) == EVT_COUNT, "event type_name size");
>>> diff --git a/include/event.h b/include/event.h
>>> index fb353ad623..fce7e96170 100644
>>> --- a/include/event.h
>>> +++ b/include/event.h
>>> @@ -153,6 +153,14 @@ enum event_t {
>>> */
>>> EVT_MAIN_LOOP,
>>>
>>> + /**
>>> + * @EVT_LMB_MAP_UPDATE:
>>> + * This event is triggered on an update to the LMB reserved memory
>>> + * region. This can be used to notify about any LMB memory allocation
>>> + * or freeing of memory having occurred.
>>> + */
>>> + EVT_LMB_MAP_UPDATE,
>>> +
>>> /**
>>> * @EVT_COUNT:
>>> * This constants holds the maximum event number + 1 and is used when
>>> @@ -203,6 +211,12 @@ union event_data {
>>> oftree tree;
>>> struct bootm_headers *images;
>>> } ft_fixup;
>>> +
>>> + struct event_lmb_map_update {
>>> + u64 base;
>>> + u64 size;
>>> + u8 op;
>>> + } lmb_map;
>>> };
>>>
>>> /**
>>
More information about the U-Boot
mailing list