[RFC PATCH 03/31] lmb: make the lmb reservations persistent

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Jun 10 13:23:49 CEST 2024


On 1/1/70 01:00, Ilias Apalodimas wrote:
> Hi Sughosh
>
> [...]
>
>>   #define LMB_ALLOC_ANYWHERE	0
>>
>> +#if !IS_ENABLED(CONFIG_LMB_USE_MAX_REGIONS)
>> +struct lmb_property memory_regions[CONFIG_LMB_MEMORY_REGIONS];
>> +struct lmb_property reserved_regions[CONFIG_LMB_RESERVED_REGIONS];
>> +#endif
>> +
>> +struct lmb lmb = {
>> +#if IS_ENABLED(CONFIG_LMB_USE_MAX_REGIONS)
>> +	.memory.max = CONFIG_LMB_MAX_REGIONS,
>> +	.reserved.max = CONFIG_LMB_MAX_REGIONS,
>> +#else
>> +	.memory.max = CONFIG_LMB_MEMORY_REGIONS,
>> +	.reserved.max = CONFIG_LMB_RESERVED_REGIONS,
>> +	.memory.region = memory_regions,
>> +	.reserved.region = reserved_regions,
>
> This is probably a good opportunity to look into why
> CONFIG_LMB_MEMORY_REGIONS was introduced.  Since we are moving towards
> static allocations, do we still need it? Or allocating the size dynamically
> covers all our cases.

Up to now we used static arrays for saving memory allocations in LMB:

include/lmb.h:67:
struct lmb_property region[CONFIG_LMB_MAX_REGIONS];

As the EFI sub-system can produce any number of non-coalescable memory
regions we should use a linked list instead.

The fields memory.max and reserved.max seem to be unused except for
test/lib/lmb.c.

lib/lmb.c:136:  lmb->memory.max = CONFIG_LMB_MAX_REGIONS;
lib/lmb.c:139:  lmb->memory.max = CONFIG_LMB_MEMORY_REGIONS;
test/lib/lmb.c:689:     ut_asserteq(lmb.memory.max, CONFIG_LMB_MAX_REGIONS);

lib/lmb.c:137:  lmb->reserved.max = CONFIG_LMB_MAX_REGIONS;
lib/lmb.c:140:  lmb->reserved.max = CONFIG_LMB_RESERVED_REGIONS;
test/lib/lmb.c:691:     ut_asserteq(lmb.reserved.max,
CONFIG_LMB_MAX_REGIONS);

Best regards

Heinrich

>
>
>> +#endif
>> +	.memory.cnt = 0,
>> +	.reserved.cnt = 0,
>> +};
>> +
>>   static void lmb_dump_region(struct lmb_region *rgn, char *name)
>>   {
>>   	unsigned long long base, size, end;
>> @@ -42,8 +61,8 @@ static void lmb_dump_region(struct lmb_region *rgn, char *name)
>>   void lmb_dump_all_force(struct lmb *lmb)
>>   {
>>   	printf("lmb_dump_all:\n");
>> -	lmb_dump_region(&lmb->memory, "memory");
>> -	lmb_dump_region(&lmb->reserved, "reserved");
>> +	lmb_dump_region(&lmb.memory, "memory");
>> +	lmb_dump_region(&lmb.reserved, "reserved");
>>   }
>>
>
> [...]
>
>
> Thanks
> /Ilias
>



More information about the U-Boot mailing list