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

Re: [UNIKRAFT PATCH v2 2/2] lib/ukboot: initialize ukallocregion



Thanks!

Reviewed-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>

On 29.07.20 10:55, Hugo Lefeuvre wrote:
Add menuconfig bindings to select a system-wide allocator.
Initialize the selected allocator in ukboot.

Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@xxxxxxxxx>
---
  lib/ukboot/Config.uk | 23 +++++++++++++++++++----
  lib/ukboot/boot.c    | 19 +++++++++++++------
  2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/lib/ukboot/Config.uk b/lib/ukboot/Config.uk
index 841a876..07139e2 100644
--- a/lib/ukboot/Config.uk
+++ b/lib/ukboot/Config.uk
@@ -17,8 +17,23 @@ if LIBUKBOOT
        int "Maximum number of arguments (max. size of argv)"
        default 60
- config LIBUKBOOT_INITALLOC
-       bool "Initialize ukallocbbuddy as allocator"
-       default y
-       select LIBUKALLOCBBUDDY
+       choice LIBUKBOOT_INITALLOC
+       prompt "Initialize memory allocator"
+       default LIBUKBOOT_INITBBUDDY
+
+               config LIBUKBOOT_INITBBUDDY
+               bool "Binary buddy allocator"
+               select LIBUKALLOCBBUDDY
+
+               config LIBUKBOOT_INITREGION
+               bool "Region allocator"
+               select LIBUKALLOCREGION
+               help
+                 Satisfy allocation as fast as possible. No support for free().
+                 Refer to help in ukallocregion for more information.
+
+               config LIBUKBOOT_NOALLOC
+               bool "None"
+
+       endchoice
  endif
diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c
index e8a2ac7..4e749aa 100644
--- a/lib/ukboot/boot.c
+++ b/lib/ukboot/boot.c
@@ -41,8 +41,10 @@
  #include <stdio.h>
  #include <errno.h>
-#if CONFIG_LIBUKALLOC && CONFIG_LIBUKALLOCBBUDDY && CONFIG_LIBUKBOOT_INITALLOC
+#if CONFIG_LIBUKBOOT_INITBBUDDY
  #include <uk/allocbbuddy.h>
+#elif CONFIG_LIBUKBOOT_INITREGION
+#include <uk/allocregion.h>
  #endif
  #if CONFIG_LIBUKSCHED
  #include <uk/sched.h>
@@ -178,7 +180,7 @@ void ukplat_entry(int argc, char *argv[])
  #if CONFIG_LIBUKALLOC
        struct uk_alloc *a = NULL;
  #endif
-#if CONFIG_LIBUKALLOC && CONFIG_LIBUKALLOCBBUDDY && CONFIG_LIBUKBOOT_INITALLOC
+#if !CONFIG_LIBUKBOOT_NOALLOC
        struct ukplat_memregion_desc md;
  #endif
  #if CONFIG_LIBUKSCHED
@@ -205,9 +207,9 @@ void ukplat_entry(int argc, char *argv[])
        }
  #endif /* CONFIG_LIBUKLIBPARAM */
-#if CONFIG_LIBUKALLOC && CONFIG_LIBUKALLOCBBUDDY && CONFIG_LIBUKBOOT_INITALLOC
+#if !CONFIG_LIBUKBOOT_NOALLOC
        /* initialize memory allocator
-        * FIXME: ukallocbbuddy is hard-coded for now
+        * FIXME: allocators are hard-coded for now
         */
        uk_pr_info("Initialize memory allocator...\n");
        ukplat_memregion_foreach(&md, UKPLAT_MEMRF_ALLOCATABLE) {
@@ -226,10 +228,15 @@ void ukplat_entry(int argc, char *argv[])
                 * As soon we have an allocator, we simply add every
                 * subsequent region to it
                 */
-               if (unlikely(!a))
+               if (!a) {
+#if CONFIG_LIBUKBOOT_INITBBUDDY
                        a = uk_allocbbuddy_init(md.base, md.len);
-               else
+#elif CONFIG_LIBUKBOOT_INITREGION
+                       a = uk_allocregion_init(md.base, md.len);
+#endif
+               } else {
                        uk_alloc_addmem(a, md.base, md.len);
+               }
        }
        if (unlikely(!a))
                uk_pr_warn("No suitable memory region for memory allocator. Continue 
without heap\n");




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.