• Stephan Gerhold's avatar
    of: reserved_mem: Try to keep range allocations contiguous · 83ba7361
    Stephan Gerhold authored
    Right now dynamic reserved memory regions are allocated either
    bottom-up or top-down, depending on the memblock setting of the
    architecture. This is fine when the address is arbitrary. However,
    when using "alloc-ranges" the regions are often placed somewhere
    in the middle of (free) RAM, even if the range starts or ends next
    to another (static) reservation.
    
    Try to detect this situation, and choose explicitly between bottom-up
    or top-down to allocate the memory close to the other reservations:
    
      1. If the "alloc-range" starts at the end or inside an existing
         reservation, use bottom-up.
      2. If the "alloc-range" ends at the start or inside an existing
         reservation, use top-down.
      3. If both or none is the case, keep the current
         (architecture-specific) behavior.
    
    There are plenty of edge cases where only a more complex algorithm
    would help, but even this simple approach helps in many cases to keep
    the reserved memory (and therefore also the free memory) contiguous.
    Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
    Link: https://lore.kernel.org/r/20230510-dt-resv-bottom-up-v2-1-aeb2afc8ac25@gerhold.netSigned-off-by: default avatarRob Herring <robh@kernel.org>
    83ba7361
of_reserved_mem.c 13.2 KB