From: Stefano Stabellini <sstabellini@kernel.org>
To: julien.grall@arm.com
Cc: Stefano Stabellini <stefanos@xilinx.com>,
sstabellini@kernel.org, andrii_anisov@epam.com,
andrew.cooper3@citrix.com, Achin.Gupta@arm.com,
xen-devel@lists.xen.org, jbeulich@suse.com
Subject: [PATCH v6 15/26] xen/arm: introduce create_domUs
Date: Fri, 2 Nov 2018 16:45:07 -0700 [thread overview]
Message-ID: <1541202318-9840-15-git-send-email-sstabellini@kernel.org> (raw)
In-Reply-To: <alpine.DEB.2.10.1811021527250.18518@sstabellini-ThinkPad-X260>
Call a new function, "create_domUs", from setup_xen to start DomU VMs.
Introduce support for the "xen,domain" compatible node on device tree.
Create new DomU VMs based on the information found on device tree under
"xen,domain". Call construct_domU for each domain.
Introduce a simple global variable named max_init_domid to keep track of
the initial allocated domids. It holds the max domid among the initial
domains.
Move the discard_initial_modules after DomUs have been built.
First create domUs, then start dom0 -- no point in trying to start dom0
when the cpu is busy.
Signed-off-by: Stefano Stabellini <stefanos@xilinx.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Julien Grall <julien.grall@arm.com>
CC: andrew.cooper3@citrix.com
CC: jbeulich@suse.com
---
Changes in v5:
- use dt_property_read_bool
- improve commit message
- code style
- use dt_find_node_by_path instead of dt_find_node_by_name
- use true with is_console
Changes in v4:
- constify parameters
- nr_spis to 0 or GUEST_VPL011_SPI - 32 + 1 depending on vpl011
- remove pointless initializer
- remove change to domain_create for dom0 (useless)
- make construct_domU return error
Changes in v3:
- move patch earlier and introduce empty construct_domU to fix bisection
builds
- fix max_init_domid to actually hold the max domid among initial
domains (instead of max_domid + 1)
- move domain_unpause_by_systemcontroller(dom0) after creating domUs
Changes in v2:
- coding style
- set nr_spis to 32
- introduce create_domUs
---
xen/arch/arm/domain_build.c | 50 +++++++++++++++++++++++++++++++++++++++++----
xen/arch/arm/setup.c | 5 +++++
xen/include/asm-arm/setup.h | 3 +++
xen/include/asm-x86/setup.h | 2 ++
4 files changed, 56 insertions(+), 4 deletions(-)
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 3a9c989..d94540e 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -7,6 +7,7 @@
#include <asm/irq.h>
#include <asm/regs.h>
#include <xen/errno.h>
+#include <xen/err.h>
#include <xen/device_tree.h>
#include <xen/libfdt/libfdt.h>
#include <xen/guest_access.h>
@@ -2307,6 +2308,50 @@ static int __init construct_domain(struct domain *d, struct kernel_info *kinfo)
return 0;
}
+static int __init construct_domU(struct domain *d,
+ const struct dt_device_node *node)
+{
+ return -ENOSYS;
+}
+
+void __init create_domUs(void)
+{
+ struct dt_device_node *node;
+ const struct dt_device_node *chosen = dt_find_node_by_path("/chosen");
+
+ BUG_ON(chosen == NULL);
+ dt_for_each_child_node(chosen, node)
+ {
+ struct domain *d;
+ struct xen_domctl_createdomain d_cfg = {
+ .arch.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE,
+ .arch.nr_spis = 0,
+ .max_vcpus = 1,
+ .max_evtchn_port = -1,
+ .max_grant_frames = 64,
+ .max_maptrack_frames = 1024,
+ };
+
+ if ( !dt_device_is_compatible(node, "xen,domain") )
+ continue;
+
+ if ( dt_property_read_bool(node, "vpl011") )
+ d_cfg.arch.nr_spis = GUEST_VPL011_SPI - 32 + 1;
+ dt_property_read_u32(node, "cpus", &d_cfg.max_vcpus);
+
+ d = domain_create(++max_init_domid, &d_cfg, false);
+ if ( IS_ERR(d) )
+ panic("Error creating domain %s", dt_node_name(node));
+
+ d->is_console = true;
+
+ if ( construct_domU(d, node) != 0 )
+ panic("Could not set up domain %s", dt_node_name(node));
+
+ domain_unpause_by_systemcontroller(d);
+ }
+}
+
int __init construct_dom0(struct domain *d)
{
struct kernel_info kinfo = {};
@@ -2357,10 +2402,7 @@ int __init construct_dom0(struct domain *d)
if ( rc < 0 )
return rc;
- rc = construct_domain(d, &kinfo);
- discard_initial_modules();
-
- return rc;
+ return construct_domain(d, &kinfo);
}
/*
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index b0a5e35..3940982 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -64,11 +64,14 @@ static unsigned long opt_xenheap_megabytes __initdata;
integer_param("xenheap_megabytes", opt_xenheap_megabytes);
#endif
+domid_t __read_mostly max_init_domid;
+
static __used void init_done(void)
{
/* Must be done past setting system_state. */
unregister_init_virtual_region();
+ discard_initial_modules();
free_init_memory();
startup_cpu_idle_loop();
}
@@ -963,6 +966,8 @@ void __init start_xen(unsigned long boot_phys_offset,
system_state = SYS_STATE_active;
+ create_domUs();
+
domain_unpause_by_systemcontroller(dom0);
/* Switch on to the dynamically allocated stack for the idle vcpu
diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
index 0d787e6..eb0c95f 100644
--- a/xen/include/asm-arm/setup.h
+++ b/xen/include/asm-arm/setup.h
@@ -75,6 +75,8 @@ struct bootinfo {
extern struct bootinfo bootinfo;
+extern domid_t max_init_domid;
+
void arch_init_memory(void);
void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len);
@@ -91,6 +93,7 @@ void acpi_create_efi_mmap_table(struct domain *d,
int acpi_make_efi_nodes(void *fdt, struct membank tbl_add[]);
int construct_dom0(struct domain *d);
+void __init create_domUs(void);
void discard_initial_modules(void);
void dt_unreserved_regions(paddr_t s, paddr_t e,
diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h
index 42fddeb..1c80783 100644
--- a/xen/include/asm-x86/setup.h
+++ b/xen/include/asm-x86/setup.h
@@ -66,4 +66,6 @@ extern bool opt_dom0_shadow;
#endif
extern bool dom0_pvh;
+#define max_init_domid (0)
+
#endif
--
1.9.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-11-02 23:45 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-02 23:45 [PATCH v6 00/25] dom0less step1: boot multiple domains from device tree Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 01/26] xen: allow console_io hypercalls from certain DomUs Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 02/26] xen/arm: extend device tree based multiboot protocol Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 03/26] xen/arm: document dom0less Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 04/26] xen/arm: increase MAX_MODULES Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 05/26] xen/arm: check for multiboot nodes only under /chosen Stefano Stabellini
2018-11-09 14:01 ` Julien Grall
2018-11-09 21:38 ` Stefano Stabellini
2018-11-09 22:35 ` Julien Grall
2018-11-12 21:13 ` Stefano Stabellini
2018-11-12 21:37 ` Julien Grall
2018-11-02 23:44 ` [PATCH v6 06/26] xen/arm: introduce bootcmdlines Stefano Stabellini
2018-11-02 23:44 ` [PATCH v6 07/26] xen/arm: don't add duplicate boot modules, introduce domU flag Stefano Stabellini
2018-11-09 14:06 ` Julien Grall
2018-11-02 23:45 ` [PATCH v6 08/26] xen/arm: probe domU kernels and initrds Stefano Stabellini
2018-11-09 14:09 ` Julien Grall
2018-11-02 23:45 ` [PATCH v6 09/26] xen/arm: add start to struct bootcmdline Stefano Stabellini
2018-11-09 14:10 ` Julien Grall
2018-11-02 23:45 ` [PATCH v6 10/26] xen/arm: rename get_11_allocation_size to get_allocation_size Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 11/26] xen/arm: rename allocate_memory to allocate_memory_11 Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 12/26] xen/arm: introduce allocate_memory Stefano Stabellini
2018-11-09 14:19 ` Julien Grall
2018-11-09 21:33 ` Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 13/26] xen/arm: refactor construct_dom0 Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 14/26] xen/arm: move unregister_init_virtual_region to init_done Stefano Stabellini
2018-11-02 23:45 ` Stefano Stabellini [this message]
2018-11-02 23:45 ` [PATCH v6 16/26] xen/arm: implement construct_domU Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 17/26] xen/arm: generate a simple device tree for domUs Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 18/26] xen/arm: make set_interrupt_ppi able to handle non-PPI Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 19/26] xen/arm: generate vpl011 node on device tree for domU Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 20/26] xen/arm: introduce a union in vpl011 Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 21/26] xen/arm: refactor vpl011_data_avail Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 22/26] xen: support console_switching between Dom0 and DomUs on ARM Stefano Stabellini
2018-11-05 9:15 ` Jan Beulich
2018-11-02 23:45 ` [PATCH v6 23/26] xen/arm: Allow vpl011 to be used by DomU Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 24/26] xen/vpl011: buffer out chars when the backend is xen Stefano Stabellini
2018-11-09 14:32 ` Julien Grall
2018-11-09 21:13 ` Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 25/26] xen/arm: move kernel.h to asm-arm/ Stefano Stabellini
2018-11-02 23:45 ` [PATCH v6 26/26] xen/arm: split domain_build.c Stefano Stabellini
2018-11-09 14:35 ` Julien Grall
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=1541202318-9840-15-git-send-email-sstabellini@kernel.org \
--to=sstabellini@kernel.org \
--cc=Achin.Gupta@arm.com \
--cc=andrew.cooper3@citrix.com \
--cc=andrii_anisov@epam.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@arm.com \
--cc=stefanos@xilinx.com \
--cc=xen-devel@lists.xen.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).