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

[XEN][PATCH 6/7] dom0less: probe kernel before creating domains


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
  • Date: Thu, 31 Jul 2025 09:42:39 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ca9D6PMkweJebiIuFfryFoA7M6qmuDZwGEjLmzQa2M4=; b=eNUewjlp/gCbeoDltmGR5hq3CsZ4MRWRiBXycklm7mx0Jo585hN0SE8n4x0xM+ED6TcK/fmj3GMcOgdtOy0sKGkgXpXMyZTzxpkeXjI04ot/wyGBSYLg/s+TOn74+i72ovW2PAilaOv5dIh8+zD4IztXt2gEaME1y1duXmp2iIBmhWFqEGCDMIZDXn3azm55K08MjeEVNOKZZbc4/Ut+Fkkb86ChEMeU0rYhnUc5ZLGizWPQPHxjEKhgRntKL4HVuHA2GclVYvDZn8JHU9Vgb7z+4/1+rIO63yS9zixG4HYp1Wl/ue1ReeACR0LeUVO8NCfxFecN4ext/J6BMCxUrg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xMjHy3MXSObE7iVBdJCIy5MvN47D2+vRQPiJJirPfBt5vxu8K/4tXMoDqnO3lOOjWc+PdjTaD1euw6QjFC78laq9XUOWbd2hKqO3S9CkDtaoH/IJD77PbayXafibnT6/nRRKulM0o79TGWytPyp/aV8cjToy0sSJWiRxNcpbIdrozs8Q2afJY4E76gDWzrqFNrt+S7vzhf3ef/ViWuuubxySYUUJeg/8+EKY0ncrrsvUBq52iJvJKFUNfDr4cbWivx/3ZI7rYY7ux6JFoCbJj3p3UwbtLUBPojTRqvmIVpEaxfKY4lHe+cqmumxcGFUYznWRdsiQhW7GYSa9FOy2fg==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Alejandro Vallejo <alejandro.garciavallejo@xxxxxxx>, Grygorii Strashko <grygorii_strashko@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Thu, 31 Jul 2025 09:42:49 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcAf90t9uAadcRfU6jyiKw0u4U4g==
  • Thread-topic: [XEN][PATCH 6/7] dom0less: probe kernel before creating domains

From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>

As was indicated in [1][2], performing guest kernel probe after creating
domain is not robust.

Hence, rework dom0less domain creation sequence to probe guest kernels
first, before creating domains, so guest type (32/64bit) can be properly
identified and domain type configured correctly from very beginning.

[1] https://lists.xen.org/archives/html/xen-devel/2025-07/msg01647.html
[2] https://lists.xen.org/archives/html/xen-devel/2025-07/msg01648.html

Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
---
 xen/arch/arm/domain_build.c             |  4 ----
 xen/common/device-tree/dom0less-build.c | 20 +++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 59966f1bcd49..bcd642477d1d 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -1986,10 +1986,6 @@ int __init construct_hwdom(struct kernel_info *kinfo,
 
     iommu_hwdom_init(d);
 
-#ifdef CONFIG_ARM_64
-    /* type must be set before allocate_memory */
-    d->arch.type = kinfo->is_32bit_type ? DOMAIN_32BIT : DOMAIN_64BIT;
-#endif
     find_gnttab_region(d, kinfo);
     if ( is_domain_direct_mapped(d) )
         allocate_memory_11(d, kinfo);
diff --git a/xen/common/device-tree/dom0less-build.c 
b/xen/common/device-tree/dom0less-build.c
index 8906e35e6978..14829ec465d1 100644
--- a/xen/common/device-tree/dom0less-build.c
+++ b/xen/common/device-tree/dom0less-build.c
@@ -746,9 +746,6 @@ static int __init construct_domU(struct kernel_info *kinfo,
     if ( rc != 0 )
         return rc;
 
-    printk("*** LOADING DOMU cpus=%u memory=%#"PRIx64"KB ***\n",
-           d->max_vcpus, mem);
-
     rc = dt_property_read_string(node, "xen,enhanced", &dom0less_enhanced);
     if ( rc == -EILSEQ ||
          rc == -ENODATA ||
@@ -770,12 +767,6 @@ static int __init construct_domU(struct kernel_info *kinfo,
 
     d->max_pages = ((paddr_t)mem * SZ_1K) >> PAGE_SHIFT;
 
-    rc = kernel_probe(kinfo, node);
-    if ( rc < 0 )
-        return rc;
-
-    set_domain_type(d, kinfo);
-
     if ( is_hardware_domain(d) )
     {
         rc = construct_hwdom(kinfo, node);
@@ -836,6 +827,17 @@ void __init create_domUs(void)
         if ( (max_init_domid + 1) >= DOMID_FIRST_RESERVED )
             panic("No more domain IDs available\n");
 
+        printk("*** LOADING DOMU cpus=%u memory=%#" PRIx64 "KB ***\n",
+               ki.bd.create_cfg.max_vcpus, ki.bd.memory);
+
+        rc = kernel_probe(&ki, node);
+        if ( rc < 0 )
+            panic("Error probing domain %s guest kernel (rc = %d)\n",
+                  dt_node_name(node), rc);
+
+        if ( ki.is_32bit_type )
+            ki.bd.create_cfg.flags |= XEN_DOMCTL_CDF_is_32bits;
+
         /*
          * The variable max_init_domid is initialized with zero, so here it's
          * very important to use the pre-increment operator to call
-- 
2.34.1



 


Rackspace

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