[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

 


Rackspace

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