
On 08/10/2017 08:29 PM, Rob Clark wrote:
This avoids printf() spam about file reads (such as loading an image) into unaligned buffers (and the associated memcpy()). And generally seems like a good idea.
Signed-off-by: Rob Clark robdclark@gmail.com
lib/efi_loader/efi_memory.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index 9e079f1fa3..2ba8d8b42b 100644 --- a/lib/efi_loader/efi_memory.c +++ b/lib/efi_loader/efi_memory.c @@ -43,7 +43,7 @@ void *efi_bounce_buffer; */ struct efi_pool_allocation { u64 num_pages;
- char data[];
- char data[] __attribute__((aligned(ARCH_DMA_MINALIGN)));
};
/* @@ -356,7 +356,8 @@ efi_status_t efi_allocate_pool(int pool_type, unsigned long size, { efi_status_t r; efi_physical_addr_t t;
- u64 num_pages = (size + sizeof(u64) + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT;
u64 num_pages = DIV_ROUND_UP(size + sizeof(struct efi_pool_allocation),
EFI_PAGE_SIZE);
if (size == 0) { *buffer = NULL;
All other divisions by EFI_PAGE_SIZE are consistently handled in the same way:
lib/efi_loader/efi_runtime.c:328:u64 pages = (len + EFI_PAGE_SIZE - 1)
EFI_PAGE_SHIFT;
lib/efi_loader/efi_memory.c:123: >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:126: return (carve_end - carve_start) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:140: newmap->desc.num_pages = (map_end - carve_start) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:145: map_desc->num_pages = (carve_start - map_start) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:331: uint64_t pages = (len + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:359: u64 num_pages = (size + sizeof(u64) + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:448: u64 pages = (ram_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:465: uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:472: runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; lib/efi_loader/efi_memory.c:481: (64 * 1024 * 1024) >> EFI_PAGE_SHIFT, lib/efi_loader/efi_image_loader.c:34: int type = *relocs >> EFI_PAGE_SHIFT; lib/efi_loader/efi_image_loader.c:170: (virt_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT); arch/arm/cpu/armv8/fsl-layerscape/cpu.c:814: pages = (ram_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; arch/arm/cpu/armv8/fsl-layerscape/fdt.c:112: ALIGN(*boot_code_size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT, cmd/bootefi.c:162: fdt_pages = fdt_size >> EFI_PAGE_SHIFT; cmd/bootefi.c:243: fdt_pages = fdt_size >> EFI_PAGE_SHIFT;
With you patch we are even inconsistent within the same .c-file.
Regards
Heinrich