[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v5 15/25] xen/arm: implement construct_domU
Similar to construct_dom0, construct_domU creates a barebone DomU guest. The device tree node passed as argument is compatible "xen,domain", see docs/misc/arm/device-tree/booting.txt. Remove #if 0 from allocate_memory as this patch will start using it. Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx> --- Changes in v5: - move changes to kernel_probe prototype to previous patch - improve commit message - remove superflous allocation of d->vcpu - use mem * SZ_1K Changes in v4: - constify kernel_probe - change title - better error messages and printed info - 64bit memory Changes in v3: - move setting type before allocate_memory - add ifdef around it and a comment Changes in v2: - rename mem to memory - make cpus and memory mandatory - remove wront comment from commit message - cpus and memory are read as integers - read the vpl011 option --- xen/arch/arm/domain_build.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 93e9510..4bb0db8 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -4,6 +4,7 @@ #include <xen/mm.h> #include <xen/domain_page.h> #include <xen/sched.h> +#include <xen/sizes.h> #include <asm/irq.h> #include <asm/regs.h> #include <xen/errno.h> @@ -369,7 +370,6 @@ static void __init allocate_memory_11(struct domain *d, } } -#if 0 static bool __init allocate_bank_memory(struct domain *d, struct kernel_info *kinfo, gfn_t sgfn, @@ -466,7 +466,6 @@ fail: (unsigned long)kinfo->unassigned_mem >> 10); BUG(); } -#endif static int __init write_properties(struct domain *d, struct kernel_info *kinfo, const struct dt_device_node *node) @@ -2308,7 +2307,37 @@ static int __init construct_domain(struct domain *d, struct kernel_info *kinfo) static int __init construct_domU(struct domain *d, const struct dt_device_node *node) { - return -ENOSYS; + struct kernel_info kinfo = {}; + int rc; + u64 mem; + + rc = dt_property_read_u64(node, "memory", &mem); + if ( !rc ) + { + printk("Error building DomU: cannot read \"memory\" property\n"); + return -EINVAL; + } + kinfo.unassigned_mem = (paddr_t)mem * SZ_1K; + + printk("*** LOADING DOMU cpus=%u memory=%luKB ***\n", d->max_vcpus, mem); + + if ( vcpu_create(d, 0, 0) == NULL ) + return -ENOMEM; + d->max_pages = ~0U; + + kinfo.d = d; + + rc = kernel_probe(&kinfo, node); + if ( rc < 0 ) + return rc; + +#ifdef CONFIG_ARM_64 + /* type must be set before allocate memory */ + d->arch.type = kinfo.type; +#endif + allocate_memory(d, &kinfo); + + return construct_domain(d, &kinfo); } void __init create_domUs(void) -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |