Received: from list by lists.gnu.org with archive (Exim 4.71) id 1TxHyM-0005j1-7j for mharc-grub-devel@gnu.org; Mon, 21 Jan 2013 09:03:38 -0500 Received: from eggs.gnu.org ([208.118.235.92]:38618) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxHyI-0005ip-Rs for grub-devel@gnu.org; Mon, 21 Jan 2013 09:03:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TxHyD-0007dL-N3 for grub-devel@gnu.org; Mon, 21 Jan 2013 09:03:34 -0500 Received: from mail-la0-f47.google.com ([209.85.215.47]:42708) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxHyD-0007cv-FD for grub-devel@gnu.org; Mon, 21 Jan 2013 09:03:29 -0500 Received: by mail-la0-f47.google.com with SMTP id fh20so6216796lab.34 for ; Mon, 21 Jan 2013 06:03:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:subject:date:message-id:x-mailer; bh=iFiuygazNUoyoEp8JmX002SPL1C2zRdLrnhfT5iBzY0=; b=Gpm+VzGprlD3EQL9AtNAa0qoB8PpmuUOsBvdrSfdqSX4YvTjHdlSge5FsQ4bjvwrKj /fxMyu7duFSH+JVg2VIPDbfJffRkgqr7iZK3wJXEcOu7SBoeiTWwLGdIADHQ+ofL/0nR 7M8aU5LhUTtj89aITlWeECAXBCoRAjVMs9teQtpSQZuzkoRekIXgbH1kAjU96M010Ldm E8FpntVx0RpCkzAL40YGxDS0H8GaL2Cb7dmPn78hHtNTOY8zc6wTjg23KGgAf+wtCZWx mfGulSjFd99rtffDU5QCUf1AWQjmBoN9RXpso6ZjDijPhvsCLstj//PHBrruXSLNfDjI Huyg== X-Received: by 10.152.113.66 with SMTP id iw2mr17314443lab.37.1358777005683; Mon, 21 Jan 2013 06:03:25 -0800 (PST) Received: from localhost.localdomain (ppp91-78-198-46.pppoe.mtu-net.ru. [91.78.198.46]) by mx.google.com with ESMTPS id td1sm5509933lab.17.2013.01.21.06.03.23 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 21 Jan 2013 06:03:24 -0800 (PST) From: Andrey Borzenkov To: grub-devel@gnu.org Subject: [PATCH] add context for alloc_mem() in ppc linux loader Date: Mon, 21 Jan 2013 18:03:15 +0400 Message-Id: <1358776995-29609-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 1.7.10.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.215.47 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jan 2013 14:03:36 -0000 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] Signed-off-by: Andrey Borzenkov --- ChangeLog | 5 ++++ grub-core/loader/powerpc/ieee1275/linux.c | 39 +++++++++++++++++++---------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c3958f..4468d9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-01-21 Andrey Borzenkov + + * grub-core/loader/powerpc/ieee1275/linux.c: Add context + for alloc_mem. + 2013-01-21 Colin Watson * grub-core/disk/arc/arcdisk.c (grub_arcdisk_iterate): Fix diff --git a/grub-core/loader/powerpc/ieee1275/linux.c b/grub-core/loader/powerpc/ieee1275/linux.c index b150904..c3e554e 100644 --- a/grub-core/loader/powerpc/ieee1275/linux.c +++ b/grub-core/loader/powerpc/ieee1275/linux.c @@ -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 -- tg: (36fd335..) fu/ppc-mem-iterator (depends on: master)