]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
kern/ieee1275/init/ppc64: Decide by request whether to initialize region
authorStefan Berger <stefanb@linux.ibm.com>
Thu, 30 Nov 2023 14:17:16 +0000 (09:17 -0500)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 5 Dec 2023 13:18:44 +0000 (14:18 +0100)
Let the regions_claim() request structure's init_region determine whether
to call grub_mm_init_region() on it. This allows for adding memory to
GRUB's memory heap if init_region is set to true, or direct usage of the
memory otherwise. Set all current callers' init_region to true since they
want to add memory regions to GRUB's heap.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Pavithra Prakash <pavrampu@in.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Carolyn Scherrer <cpscherr@us.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
grub-core/kern/ieee1275/init.c
include/grub/ieee1275/alloc.h

index b65fc9be51cf3741d8c4cc2c4dd43faabcaa36cf..8e69da297617da7205f4b2dba95af6aef35bf122 100644 (file)
@@ -515,7 +515,8 @@ regions_claim (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
       err = grub_claimmap (addr, len);
       if (err)
        return err;
-      grub_mm_init_region ((void *) (grub_addr_t) addr, len);
+      if (rcr->init_region)
+          grub_mm_init_region ((void *) (grub_addr_t) addr, len);
       rcr->total -= len;
     }
 
@@ -534,6 +535,7 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
   struct regions_claim_request rcr = {
     .flags = GRUB_MM_ADD_REGION_NONE,
     .total = *(grub_uint32_t *) data,
+    .init_region = true,
   };
   int ret;
 
@@ -551,6 +553,7 @@ region_claim (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
   struct regions_claim_request rcr = {
     .flags = GRUB_MM_ADD_REGION_CONSECUTIVE,
     .total = *(grub_uint32_t *) data,
+    .init_region = true,
   };
   int ret;
 
index 12fade5e4c2641fee007ad4bdb3aa0655996e09d..523f51fc6b76023e6bfef1d530766b6ea47ef18f 100644 (file)
 #ifndef GRUB_IEEE1275_ALLOC_HEADER
 #define GRUB_IEEE1275_ALLOC_HEADER     1
 
+#include <stdbool.h>
+
 #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 */
+  bool init_region;       /* whether to add memory to the heap using grub_mm_init_region() */
 };
 
 #endif /* GRUB_IEEE1275_ALLOC_HEADER */