All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org, jgross@suse.com,
	Bertrand.Marquis@arm.com, julien@xen.org,
	Volodymyr_Babchuk@epam.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v4 2/9] xen/arm: implement domU extended regions
Date: Thu, 31 Mar 2022 17:38:40 -0700	[thread overview]
Message-ID: <20220401003847.38393-2-sstabellini@kernel.org> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2203311735380.2910984@ubuntu-linux-20-04-desktop>

From: Stefano Stabellini <stefano.stabellini@xilinx.com>

Implement extended regions for dom0less domUs. The implementation is
based on the libxl implementation.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
 xen/arch/arm/domain_build.c | 42 ++++++++++++++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 3 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 8be01678de..b6189b935d 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -1324,6 +1324,35 @@ out:
     return res;
 }
 
+#define ALIGN_UP_TO_2MB(x)   (((x) + MB(2) - 1) & (~(MB(2) - 1)))
+
+static int __init find_domU_holes(const struct kernel_info *kinfo,
+                                  struct meminfo *ext_regions)
+{
+    unsigned int i;
+    uint64_t bankend[GUEST_RAM_BANKS];
+    const uint64_t bankbase[] = GUEST_RAM_BANK_BASES;
+    const uint64_t banksize[] = GUEST_RAM_BANK_SIZES;
+
+    for ( i = 0; i < GUEST_RAM_BANKS; i++ )
+    {
+        ext_regions->bank[ext_regions->nr_banks].start =
+            ALIGN_UP_TO_2MB(bankbase[i] + kinfo->mem.bank[i].size);
+
+        bankend[i] = ~0ULL >> (64 - p2m_ipa_bits);
+        bankend[i] = min(bankend[i], bankbase[i] + banksize[i] - 1);
+        if (bankend[i] > ext_regions->bank[ext_regions->nr_banks].start)
+            ext_regions->bank[ext_regions->nr_banks].size =
+                bankend[i] - ext_regions->bank[ext_regions->nr_banks].start + 1;
+
+        /* 64MB is the minimum size of an extended region */
+        if ( ext_regions->bank[ext_regions->nr_banks].size < MB(64) )
+            continue;
+        ext_regions->nr_banks++;
+    }
+    return 0;
+}
+
 static int __init make_hypervisor_node(struct domain *d,
                                        const struct kernel_info *kinfo,
                                        int addrcells, int sizecells)
@@ -1374,10 +1403,17 @@ static int __init make_hypervisor_node(struct domain *d,
         if ( !ext_regions )
             return -ENOMEM;
 
-        if ( !is_iommu_enabled(d) )
-            res = find_unallocated_memory(kinfo, ext_regions);
+        if ( is_domain_direct_mapped(d) )
+        {
+            if ( !is_iommu_enabled(d) )
+                res = find_unallocated_memory(kinfo, ext_regions);
+            else
+                res = find_memory_holes(kinfo, ext_regions);
+        }
         else
-            res = find_memory_holes(kinfo, ext_regions);
+        {
+            res = find_domU_holes(kinfo, ext_regions);
+        }
 
         if ( res )
             printk(XENLOG_WARNING "Failed to allocate extended regions\n");
-- 
2.25.1



  parent reply	other threads:[~2022-04-01  0:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-01  0:38 [PATCH v4 0/9] dom0less PV drivers Stefano Stabellini
2022-04-01  0:38 ` [PATCH v4 1/9] xen/dt: dt_property_read_string should return -ENODATA on !length Stefano Stabellini
2022-04-01  8:05   ` Henry Wang
2022-04-01  0:38 ` Stefano Stabellini [this message]
2022-04-01 13:52   ` [PATCH v4 2/9] xen/arm: implement domU extended regions Luca Fancellu
2022-04-01 14:34   ` Julien Grall
2022-04-01  0:38 ` [PATCH v4 3/9] xen/arm: temporarily elevate idle_domain privileged during create_domUs Stefano Stabellini
2022-04-01 17:36   ` Julien Grall
2022-04-01  0:38 ` [PATCH v4 4/9] xen: export evtchn_alloc_unbound Stefano Stabellini
2022-04-05  9:50   ` Jan Beulich
2022-04-01  0:38 ` [PATCH v4 5/9] xen: introduce xen,enhanced dom0less property Stefano Stabellini
2022-04-01  0:38 ` [PATCH v4 6/9] xen/arm: configure dom0less domain for enabling xenstore after boot Stefano Stabellini
2022-04-01  0:38 ` [PATCH v4 7/9] xenstored: send an evtchn notification on introduce_domain Stefano Stabellini
2022-04-01 12:48   ` Juergen Gross
2022-04-01  0:38 ` [PATCH v4 8/9] tools: add example application to initialize dom0less PV drivers Stefano Stabellini
2022-04-01 10:21   ` Julien Grall
2022-04-01 10:46     ` Juergen Gross
2022-04-01 13:35       ` Julien Grall
2022-04-01 13:52         ` Juergen Gross
2022-04-01 14:04           ` Julien Grall
2022-04-01 14:11             ` Juergen Gross
2022-04-06  2:21       ` Stefano Stabellini
2022-04-06  8:58         ` Julien Grall
2022-04-13  1:22           ` Stefano Stabellini
2022-04-01  0:38 ` [PATCH v4 9/9] docs: document dom0less + " Stefano Stabellini
2022-04-01 10:48   ` Luca Fancellu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220401003847.38393-2-sstabellini@kernel.org \
    --to=sstabellini@kernel.org \
    --cc=Bertrand.Marquis@arm.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=jgross@suse.com \
    --cc=julien@xen.org \
    --cc=stefano.stabellini@xilinx.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.