[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |