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