[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 5/5] tools: add example application to initialize dom0less PV drivers
On Fri, 1 Apr 2022, Julien Grall wrote: > On 01/04/2022 01:35, Stefano Stabellini wrote: > > > > > > + > > > > > > + /* Alloc magic pages */ > > > > > > + if (alloc_magic_pages(info, &dom) != 0) { > > > > > > + printf("Error on alloc magic pages\n"); > > > > > > + return 1; > > > > > > + } > > > > > > + > > > > > > + xc_dom_gnttab_init(&dom); > > > > > > > > > > This call as the risk to break the guest if the dom0 Linux doesn't > > > > > support > > > > > the > > > > > acquire interface. This is because it will punch a hole in the domain > > > > > memory > > > > > where the grant-table may have already been mapped. > > > > > > > > > > Also, this function could fails. > > > > > > > > I'll check for return errors. Dom0less is for fully static > > > > configurations so I think it is OK to return error and abort if > > > > something unexpected happens: dom0less' main reason for being is that > > > > there is nothing unexpected :-) > > > Does this mean the caller will have to reboot the system if there is an > > > error? > > > IOW, we don't expect them to call ./init-dom0less twice. > > > > Yes, exactly. I think init-dom0less could even panic. My mental model is > > that this is an "extension" of construct_domU. Over there we just panic > > if something is wrong and here it would be similar. The user provided a > > wrong config and should fix it. > > Ok. I think we should make explicit how it can be used. > > > > > > > + > > > > > > + libxl_uuid_generate(&uuid); > > > > > > + xc_domain_sethandle(dom.xch, info->domid, > > > > > > libxl_uuid_bytearray(&uuid)); > > > > > > + > > > > > > + rc = gen_stub_json_config(info->domid, &uuid); > > > > > > + if (rc) > > > > > > + err(1, "gen_stub_json_config"); > > > > > > + > > > > > > + rc = restore_xenstore(xsh, info, uuid, dom.xenstore_evtchn); > > > > > > + if (rc) > > > > > > + err(1, "writing to xenstore"); > > > > > > + > > > > > > + xs_introduce_domain(xsh, info->domid, > > > > > > + (GUEST_MAGIC_BASE >> XC_PAGE_SHIFT) + > > > > > > XENSTORE_PFN_OFFSET, > > > > > > + dom.xenstore_evtchn); > > > > > > > > > > xs_introduce_domain() can technically fails. > > > > > > > > OK > > > > > > > > > > > > > > + return 0; > > > > > > +} > > > > > > + > > > > > > +/* Check if domain has been configured in XS */ > > > > > > +static bool domain_exists(struct xs_handle *xsh, int domid) > > > > > > +{ > > > > > > + return xs_is_domain_introduced(xsh, domid); > > > > > > +} > > > > > > > > > > Would not this lead to initialize a domain with PV driver disabled? > > > > > > > > I am not sure I understood your question, but I'll try to answer anyway. > > > > This check is purely to distinguish dom0less guests, which needs further > > > > initializations, from regular guests (e.g. xl guests) that don't need > > > > any actions taken here. > > > > > > Dom0less domUs can be divided in two categories based on whether they are > > > xen > > > aware (e.g. xen,enhanced is set). > > > > > > Looking at this script, it seems to assume that all dom0less domUs are Xen > > > aware. So it will end up to allocate Xenstore ring and call > > > xs_introduce_domain(). I suspect the call will end up to fail because the > > > event channel would be 0. > > > > > > So did you try to use this script on a platform where there only xen aware > > > domU and/or a mix? > > > > Good idea of asking for this test. I thought I already ran that test, > > but I did it again to be sure. Everything works OK (although the > > xenstore page allocation is unneeded). xs_introduce_domain does not > > fail: > > Are you sure? If I pass 0 as the 4th argument (event channel), the command > will return EINVAL. However, looking at the code you are not checking the > return for the call. So you will continue as if it were successful. We are not passing 0 as the 4th argument, we are passing the event channel previously set as HVM_PARAM_STORE_EVTCHN by Xen: rc = xc_hvm_param_get(xch, info->domid, HVM_PARAM_STORE_EVTCHN, &xenstore_evtchn); Also in my working version of the series I have a check for the return value of xs_introduce_domain (as you requested in one of your previous reviews). So xs_introduce_domain is actually working correctly and returning success.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |