grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] add context for alloc_mem() in ppc linux loader


From: Andrey Borzenkov
Subject: [PATCH] add context for alloc_mem() in ppc linux loader
Date: Mon, 21 Jan 2013 18:03:15 +0400

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 <address@hidden>

---
 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 <address@hidden>
+
+       * grub-core/loader/powerpc/ieee1275/linux.c: Add context
+       for alloc_mem.
+
 2013-01-21  Colin Watson  <address@hidden>
 
        * 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]