Introduce a request structure to pass various parameters to the
regions_claim() function. Move the total and flags variables into this
structure.

Signed-off-by: Stefan Berger <stef...@linux.ibm.com>
Cc: Hari Bathini <hbath...@linux.ibm.com>
Cc: Pavithra Prakash <pavra...@in.ibm.com>
Cc: Michael Ellerman <m...@ellerman.id.au>
Cc: Carolyn Scherrer <cpsch...@us.ibm.com>
Cc: Mahesh Salgaonkar <mah...@linux.ibm.com>
Cc: Sourabh Jain <sourabhj...@linux.ibm.com>
---
 grub-core/Makefile.am                 |  1 +
 grub-core/kern/ieee1275/init.c        | 43 ++++++++++++++++++++-------
 include/grub/powerpc/ieee1275/alloc.h | 11 +++++++
 3 files changed, 45 insertions(+), 10 deletions(-)
 create mode 100644 include/grub/powerpc/ieee1275/alloc.h

diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index f0cb2f2cc..4f9f3f963 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -240,6 +240,7 @@ endif
 
 if COND_powerpc_ieee1275
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/powerpc/ieee1275/alloc.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
index d6c9c9049..061c28c98 100644
--- a/grub-core/kern/ieee1275/init.c
+++ b/grub-core/kern/ieee1275/init.c
@@ -46,6 +46,9 @@
 #ifdef __sparc__
 #include <grub/machine/kernel.h>
 #endif
+#ifdef __powerpc__
+#include <grub/powerpc/ieee1275/alloc.h>
+#endif
 
 /* The maximum heap size we're going to claim at boot. Not used by sparc. */
 #ifdef __i386__
@@ -317,9 +320,9 @@ count_free (grub_uint64_t addr, grub_uint64_t len, 
grub_memory_type_t type,
 
 static int
 regions_claim (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
-             unsigned int flags, void *data)
+              void *data)
 {
-  grub_uint32_t total = *(grub_uint32_t *) data;
+  struct regions_claim_request *rcr = data;
   grub_uint64_t linux_rmo_save;
 
   if (type != GRUB_MEMORY_AVAILABLE)
@@ -499,11 +502,11 @@ regions_claim (grub_uint64_t addr, grub_uint64_t len, 
grub_memory_type_t type,
             }
         }
     }
-  if (flags & GRUB_MM_ADD_REGION_CONSECUTIVE && len < total)
+  if (rcr->flags & GRUB_MM_ADD_REGION_CONSECUTIVE && len < rcr->total)
     return 0;
 
-  if (len > total)
-    len = total;
+  if (len > rcr->total)
+    len = rcr->total;
 
   if (len)
     {
@@ -513,12 +516,12 @@ regions_claim (grub_uint64_t addr, grub_uint64_t len, 
grub_memory_type_t type,
       if (err)
        return err;
       grub_mm_init_region ((void *) (grub_addr_t) addr, len);
-      total -= len;
+      rcr->total -= len;
     }
 
-  *(grub_uint32_t *) data = total;
+  *(grub_uint32_t *) data = rcr->total;
 
-  if (total == 0)
+  if (rcr->total == 0)
     return 1;
 
   return 0;
@@ -528,14 +531,34 @@ static int
 heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
           void *data)
 {
-  return regions_claim (addr, len, type, GRUB_MM_ADD_REGION_NONE, data);
+  struct regions_claim_request rcr = {
+    .flags = GRUB_MM_ADD_REGION_NONE,
+    .total = *(grub_uint32_t *) data,
+  };
+  int ret;
+
+  ret = regions_claim (addr, len, type, &rcr);
+
+  *(grub_uint32_t *) data = rcr.total;
+
+  return ret;
 }
 
 static int
 region_claim (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
           void *data)
 {
-  return regions_claim (addr, len, type, GRUB_MM_ADD_REGION_CONSECUTIVE, data);
+  struct regions_claim_request rcr = {
+    .flags = GRUB_MM_ADD_REGION_CONSECUTIVE,
+    .total = *(grub_uint32_t *) data,
+  };
+  int ret;
+
+  ret = regions_claim (addr, len, type, &rcr);
+
+  *(grub_uint32_t *) data = rcr.total;
+
+  return ret;
 }
 
 static grub_err_t
diff --git a/include/grub/powerpc/ieee1275/alloc.h 
b/include/grub/powerpc/ieee1275/alloc.h
new file mode 100644
index 000000000..97b8c2683
--- /dev/null
+++ b/include/grub/powerpc/ieee1275/alloc.h
@@ -0,0 +1,11 @@
+#ifndef GRUB_POWERPC_IEEE1275_ALLOC_HEADER
+#define GRUB_POWERPC_IEEE1275_ALLOC_HEADER     1
+
+#include <grub/memory.h>
+
+struct regions_claim_request {
+  unsigned int flags;     /* GRUB_MM_ADD_REGION_(NONE|CONSECUTIVE) */
+  grub_uint32_t total;    /* number of requested bytes */
+};
+
+#endif /* GRUB_POWERPC_IEEE1275_ALLOC_HEADER */
-- 
2.25.1


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to