From: Julien Grall <julien.gr...@arm.com>

RAM initialization is unnecessarily split between kvm__init_ram() and
kvm__arch_init(). Move all code related to RAM initialization to
kvm__init_ram(), making the code easier to follow and to modify.

One thing to note is that the initialization order is slightly altered:
kvm__arch_enable_mte() and gic__create() are now called before mmap'ing the
guest RAM. That is perfectly fine, as they don't use the host's mapping of
the guest memory.

Signed-off-by: Julien Grall <julien.gr...@arm.com>
Signed-off-by: Alexandru Elisei <alexandru.eli...@arm.com>
---
 arm/kvm.c | 52 ++++++++++++++++++++++++++--------------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/arm/kvm.c b/arm/kvm.c
index bd44aa350796..abcccfabf59e 100644
--- a/arm/kvm.c
+++ b/arm/kvm.c
@@ -26,9 +26,34 @@ bool kvm__arch_cpu_supports_vm(void)
 
 void kvm__init_ram(struct kvm *kvm)
 {
-       int err;
        u64 phys_start, phys_size;
        void *host_mem;
+       int err;
+
+       /*
+        * Allocate guest memory. We must align our buffer to 64K to
+        * correlate with the maximum guest page size for virtio-mmio.
+        * If using THP, then our minimal alignment becomes 2M.
+        * 2M trumps 64K, so let's go with that.
+        */
+       kvm->ram_size = kvm->cfg.ram_size;
+       kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M;
+       kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm,
+                                               kvm->cfg.hugetlbfs_path,
+                                               kvm->arch.ram_alloc_size);
+
+       if (kvm->arch.ram_alloc_start == MAP_FAILED)
+               die("Failed to map %lld bytes for guest memory (%d)",
+                   kvm->arch.ram_alloc_size, errno);
+
+       kvm->ram_start = (void *)ALIGN((unsigned long)kvm->arch.ram_alloc_start,
+                                       SZ_2M);
+
+       madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size,
+               MADV_MERGEABLE);
+
+       madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size,
+               MADV_HUGEPAGE);
 
        phys_start      = ARM_MEMORY_AREA;
        phys_size       = kvm->ram_size;
@@ -59,31 +84,6 @@ void kvm__arch_set_cmdline(char *cmdline, bool video)
 
 void kvm__arch_init(struct kvm *kvm)
 {
-       /*
-        * Allocate guest memory. We must align our buffer to 64K to
-        * correlate with the maximum guest page size for virtio-mmio.
-        * If using THP, then our minimal alignment becomes 2M.
-        * 2M trumps 64K, so let's go with that.
-        */
-       kvm->ram_size = kvm->cfg.ram_size;
-       kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M;
-       kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm,
-                                               kvm->cfg.hugetlbfs_path,
-                                               kvm->arch.ram_alloc_size);
-
-       if (kvm->arch.ram_alloc_start == MAP_FAILED)
-               die("Failed to map %lld bytes for guest memory (%d)",
-                   kvm->arch.ram_alloc_size, errno);
-
-       kvm->ram_start = (void *)ALIGN((unsigned long)kvm->arch.ram_alloc_start,
-                                       SZ_2M);
-
-       madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size,
-               MADV_MERGEABLE);
-
-       madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size,
-               MADV_HUGEPAGE);
-
        /* Create the virtual GIC. */
        if (gic__create(kvm, kvm->cfg.arch.irqchip))
                die("Failed to create virtual GIC");
-- 
2.36.1

_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to