kern/ieee1275/init/ppc64: Add support for alignment requirements

Add support for memory alignment requirements and adjust a candidate
address to it before checking whether the block is large enough. This
must be done in this order since the alignment adjustment can make
a block smaller than what was requested.

None of the current callers has memory alignment requirements but the
ieee1275 loader for kernel and initrd will use it to convey them.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Pavithra Prakash <pavrampu@in.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Carolyn Scherrer <cpscherr@us.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
This commit is contained in:
Stefan Berger authored and Daniel Kiper committed 2023-12-05 14:29:55 +01:00
1 parent fe5d5e8571
commit d49e86db2c
2 files changed
+15

No files matched your search

+14
View File
@@ -502,6 +502,20 @@ regions_claim (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
}
}
}
/* Honor alignment restrictions on candidate addr */
if (rcr->align)
{
grub_uint64_t align_addr = ALIGN_UP (addr, rcr->align);
grub_uint64_t d = align_addr - addr;
if (d > len)
return 0;
len -= d;
addr = align_addr;
}
if (rcr->flags & GRUB_MM_ADD_REGION_CONSECUTIVE && len < rcr->total)
return 0;