[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 14/15] xen/arm: call construct_domU from start_xen and start DomU VMs
On Mon, 9 Jul 2018, Julien Grall wrote: > Hi Stefano, > > On 07/07/18 00:11, Stefano Stabellini wrote: > > On Fri, 15 Jun 2018, Julien Grall wrote: > > > On 06/13/2018 11:15 PM, Stefano Stabellini wrote: > > > > Introduce support for the "xen,domU" compatible node on device tree. > > > > Create new DomU VMs based on the information found on device tree under > > > > "xen,domU". > > > > > > While I like the idea of having multiple domain created by Xen, I think > > > there > > > are still few open questions here: > > > 1) The domains will be listed via "xl list". So are they still > > > manageable via DOMCTL? > > > > Yes, they are. There is an argument for making them "hidden" from > > DOMCTLs, but that is not done as part of this series. Future work. > > What will happen with libxl today? Is the toolstack going to be confused? The toolstack can list the running domains without problems with `xl list' (although they have no name). Also, xl vcpu-pin works fine. However, some operations might not work correctly though. For instance, `xl destroy' cannot completely get rid of the domain. I'll add info about these limitations to a separate dom0less document (as you also suggested below), because it is not part of the multiboot spec. > > > > > > > 2) Is it possible to restart those domains? > > > > No they can't be restarted. For example, their original kernel is gone > > from memory. > > So what will happen if you use "xl restart" on them? Do you mean `xl reboot'? The command executes but nothing happens. > > > > > > > 3) If a domain crash, what will happen? Are they just going to sit > > > there using resources until the platform rebooted? > > > > The entire platform needs to be rebooted. > > That should be clarified somewhere in the documentation. Yes, you are right. I'll add this to the new dom0less doc. > > > > > > > 4) How do you handle scheduling? Is it still possible to do it via > > > Dom0? How about the dom0less situation? > > > > The scheduler can be chosen via the Xen command line option. It is also > > possible to do that from dom0 (if there is a dom0). > > Can you explain how the vCPUs are going to get pinned via the command line? Today, only dom0 vCPUs can get automatically pinned with a Xen command line option. However, `xl vcpu-pin' in dom0 works with other domains started by Xen at boot, and the NULL scheduler doesn't require pinning. FYI for my own usage, I plan to use the NULL scheduler. > > > > > > > > > > > > Introduce a simple global variable named max_init_domid to keep track of > > > > the initial allocated domids. > > > > > > What is the exact goal of this new variable? > > > > The goal of this variable is to know the number of domUs allocated at > > boot time by Xen. Specifically, it is used by console.c to switch the > > serial input to the right domU. > > I don't think this is necessary. I will reply on the second version. OK > > > > > > > > > > > > Move the discard_initial_modules after DomUs have been built > > > > > > > > Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx> > > > > --- > > > > xen/arch/arm/domain_build.c | 2 -- > > > > xen/arch/arm/setup.c | 35 ++++++++++++++++++++++++++++++++++- > > > > xen/include/asm-arm/setup.h | 2 ++ > > > > xen/include/asm-x86/setup.h | 2 ++ > > > > > > You need to CC x86 maintainers for this change. > > > > I'll add them > > > > > > > > 4 files changed, 38 insertions(+), 3 deletions(-) > > > > > > > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > > > > index 97f14ca..e2d370f 100644 > > > > --- a/xen/arch/arm/domain_build.c > > > > +++ b/xen/arch/arm/domain_build.c > > > > @@ -2545,8 +2545,6 @@ int __init construct_dom0(struct domain *d) > > > > if ( rc < 0 ) > > > > return rc; > > > > - discard_initial_modules(); > > > > - > > > > > > Please mention this move in the commit message. > > > > It is mentioned: "Move the discard_initial_modules after DomUs have been > > built" > > I missed that sorry. > > > > > > > > > return __construct_domain(d, &kinfo); > > > > } > > > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > > > > index 98bdb24..3723704 100644 > > > > --- a/xen/arch/arm/setup.c > > > > +++ b/xen/arch/arm/setup.c > > > > @@ -63,6 +63,8 @@ static unsigned long opt_xenheap_megabytes __initdata; > > > > integer_param("xenheap_megabytes", opt_xenheap_megabytes); > > > > #endif > > > > +domid_t __read_mostly max_init_domid = 0; > > > > + > > > > static __used void init_done(void) > > > > { > > > > free_init_memory(); > > > > @@ -711,6 +713,8 @@ void __init start_xen(unsigned long > > > > boot_phys_offset, > > > > struct bootmodule *xen_bootmodule; > > > > struct domain *dom0; > > > > struct xen_domctl_createdomain dom0_cfg = {}; > > > > + struct dt_device_node *chosen; > > > > + struct dt_device_node *node; > > > > dcache_line_bytes = read_dcache_line_bytes(); > > > > @@ -860,7 +864,7 @@ void __init start_xen(unsigned long > > > > boot_phys_offset, > > > > dom0_cfg.arch.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE; > > > > dom0_cfg.arch.nr_spis = gic_number_lines() - 32; > > > > - dom0 = domain_create(0, &dom0_cfg); > > > > + dom0 = domain_create(max_init_domid++, &dom0_cfg); > > > > if ( IS_ERR(dom0) || (alloc_dom0_vcpu0(dom0) == NULL) ) > > > > panic("Error creating domain 0"); > > > > @@ -886,6 +890,35 @@ void __init start_xen(unsigned long > > > > boot_phys_offset, > > > > domain_unpause_by_systemcontroller(dom0); > > > > + chosen = dt_find_node_by_name(dt_host, "chosen"); > > > > + if ( chosen != NULL ) > > > > + { > > > > + dt_for_each_child_node(chosen, node) > > > > + { > > > > + struct domain *d; > > > > + struct xen_domctl_createdomain d_cfg = {}; > > > > > > There are quite a few field in xen_domctl_createdomain that we may want to > > > allow the user setting them. I am thinking of ssidref for XSM. How is this > > > going to be done? > > > > We'll introduce a separate function to initialize the > > xen_domctl_createdomain fields as necessary. I don't think it is > > required at the moment? > > I didn't ask the implementation but how this is going to fit together. > > > > > + > > > > + if ( !dt_device_is_compatible(node, "xen,domU") ) > > > > + continue; > > > > + > > > > + d_cfg.arch.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE; > > > > > > Any reason to impose using the native GIC here? > > > > It is a good default. I haven't introduced an option to change the gic > > version for a domU yet. It could be possible to add it in the future. > > Please document it in somewhere. Yes, I'll also add this to the separate dom0less document. > > > > + > > > > + d = domain_create(max_init_domid++, &d_cfg); > > > > + if ( IS_ERR(d)) > > > > > > Coding style ( ... ) > > > > I'll fix > > > > > > > > + panic("Error creating domU"); > > > > + > > > > + d->is_privileged = 0; > > > > + d->target = NULL; > > > > > > Why do you set them? They are zeroed by default. > > > > Mostly for my own clarity and understading. I can remove them if you > > prefer. > > I would rather remove it because it give the feeling the other fields may not > be zeroed. OK _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |