add context for alloc_mem() in ppc linux loader
PATCH 1/1 add context for alloc_mem() in ppc linux loader
alloc_mem() was accessing parameters of grub_linux_claimmap_iterate()
Fixes
loader/powerpc/ieee1275/linux.c: In function 'alloc_mem':loader/powerpc/ieee1275/linux.c:62:10: error: 'align' undeclared (first use in this function) loader/powerpc/ieee1275/linux.c:62:10: note: each undeclared identifier is reported only once for each function it appears in loader/powerpc/ieee1275/linux.c:63:3: error: 'target' undeclared (first use in this function) loader/powerpc/ieee1275/linux.c:70:41: error: 'size' undeclared (first use in this function) loader/powerpc/ieee1275/linux.c: In function 'grub_linux_claimmap_iterate':loader/powerpc/ieee1275/linux.c:93:42: error: unused parameter 'target' [-Werror=unused-parameter] loader/powerpc/ieee1275/linux.c:93:62: error: unused parameter 'size' [-Werror=unused-parameter] loader/powerpc/ieee1275/linux.c:94:21: error: unused parameter 'align' [-Werror=unused-parameter]
--- ChangeLog | 5 ++++ grub-core/loader/powerpc/ieee1275/linux.c | 39 +++++++++++++++++++---------- 2 files changed, 31 insertions(+), 13 deletions(-)
ChangeLog +5 -0
@@ -1,3 +1,8 @@ +2013-01-21 Andrey Borzenkov <[email protected]> + + * grub-core/loader/powerpc/ieee1275/linux.c: Add context + for alloc_mem. + 2013-01-21 Colin Watson <[email protected]> * grub-core/disk/arc/arcdisk.c (grub_arcdisk_iterate): Fix
grub-core/loader/powerpc/ieee1275/linux.c +26 -13
@@ -51,37 +51,45 @@ static char *linux_args;typedef void (*kernel_entry_t ) (void *,unsigned long ,int (void *),unsigned long ,unsigned long ); +/* Context for alloc_mem. */ +struct alloc_mem_ctx { +grub_addr_t found_addr; +grub_addr_t target; +grub_size_t size; +grub_size_t align; +}; +/* Helper for grub_linux_claimmap_iterate. */ static int alloc_mem (grub_uint64_t addr,grub_uint64_t len,grub_memory_type_t type,void *data) { -grub_addr_t *found_addr = data; +struct alloc_mem_ctx *ctx = data;grub_uint64_t end = addr + len; - addr =ALIGN_UP (addr, align); - target =ALIGN_UP (target, align); + addr =ALIGN_UP (addr, ctx->align); + ctx->target =ALIGN_UP (ctx->target, ctx->align);/* Target above the memory chunk. */ -if (type !=GRUB_MEMORY_AVAILABLE || target > end) +if (type !=GRUB_MEMORY_AVAILABLE || ctx->target > end)return 0 ;/* Target inside the memory chunk. */ -if (target >= addr && target < end && size <= end - target) +if (ctx->target >= addr && ctx->target < end && ctx->size <= end - ctx->target) { -if (grub_claimmap (target, size) ==GRUB_ERR_NONE ) +if (grub_claimmap (ctx->target, ctx->size) ==GRUB_ERR_NONE ) { - *found_addr = target; + ctx->found_addr = ctx->target;return 1 ; }grub_print_error (); }/* Target below the memory chunk. */ -if (target < addr && addr + size <= end) +if (ctx->target < addr && addr + ctx->size <= end) { -if (grub_claimmap (addr, size) ==GRUB_ERR_NONE ) +if (grub_claimmap (addr, ctx->size) ==GRUB_ERR_NONE ) { - *found_addr = addr; + ctx->found_addr = addr;return 1 ; }grub_print_error ();
@@ -93,11 +101,16 @@ static grub_addr_t grub_linux_claimmap_iterate (grub_addr_t target, grub_size_t size, grub_size_t align) { - grub_addr_t found_addr = (grub_addr_t) -1; + struct alloc_mem_ctx ctx = { + .found_addr = (grub_addr_t) -1 , + .target =ALIGN_UP (target, align), + .size = size, + .align = align, + }; -grub_machine_mmap_iterate (alloc_mem, &found_addr); +grub_machine_mmap_iterate (alloc_mem, &ctx); -return found_addr; +return ctx.found_addr; } static grub_err_t
Signature · 1 line
tg: (36fd335..) fu/ppc-mem-iterator (depends on: master)
Quoted 1 line · Andrey Borzenkov
alloc_mem()was accessing parameters ofgrub_linux_claimmap_iterate()
I fixed this (and a similar sparc64 failure) independently following a report from Vladimir on IRC, before seeing your mail. Sorry for the inconvenience.
Signature · 1 line
Colin Watson [[email protected]]