[SeaBIOS] [PATCH 3/4] Switch from array based resource allocation to list

Kevin O'Connor kevin at koconnor.net
Fri Apr 20 05:36:21 CEST 2012

On Thu, Apr 19, 2012 at 07:00:41PM +1200, Alexey Korolev wrote:
> Here is the whole series of patches including 64bit support.


> [Patch 5]
> Track-alignment-explicitly
> Almost the same as the previous, just changed priority from r->align to r->sum when setting start address of root regions.
> I guess there are more chances to fit memory regions if we try place regions with higher r->sum like it was before.
> Consider default config
> #define BUILD_PCIMEM_START       0xe0000000
> #define BUILD_PCIMEM_END          0xfec00000 
> Image we have 1 pref. mem. region of 128MB. And many small memory regions which take rest of available 492MB - 128MB
> If we have alignment priority.
> PCI pref memory region will start from F000 0000
> and
> PCI memoryregion will start from 0xe0000000
> and do not fit.

The section with the lowest alignment would get allocated first and be
at a higher address.  So, in your example, the regular memory region
would be assigned 0xe8000000 and then pref mem would be assigned

Your example is why alignment should be used instead of size.  If size
is used, then what you cite above occurs (pref mem has the lower size
and is thus allocated first at the higher address).

> [Patch 10]
> New:  Migrate 64bit entries to 64bit pci regions
>  if they do not fit in 32bit range. Pci region stats
>  are now calculated. Added protection when total size of
>  PCI resources is over 4GB.

Patches 1-9 and 11 look okay to me.

On patch 10, it would be preferable to separate the dynamic
calculation of sum/alignment changes from the 64bit support.
Otherwise, the core algorithm of patch 10 looks okay.  Though it seems
like the code is recalculating sum/alignment more than needed, and I
think the list manipulation in pci_region_migrate_64bit_entries could
be streamlined.

Thanks again,

More information about the SeaBIOS mailing list