[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/5] libxl: wait for stubdom to be ready
On Wed, Mar 18, 2015 at 01:35:15PM +0000, Ian Campbell wrote: > On Fri, 2015-03-13 at 10:34 +0000, Wei Liu wrote: > > Watch /local/domain/$dm_domid/device-model/$domid/state, wait until > > state turns "running" then unpause guest. > > > > LIBXL_STUBDOM_START_TIMEOUT is the timeout used wait for stubdom to be > > ready. My test on a very old machine (Core 2 6400) showed that it might > > need more than 20s before the stubdom is ready to serve DomU. > > > > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > > --- > > tools/libxl/libxl_dm.c | 39 ++++++++++++++++++++++++++++++++++++++- > > tools/libxl/libxl_internal.h | 2 ++ > > 2 files changed, 40 insertions(+), 1 deletion(-) > > > > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > > index 4a38455..ad2ef41 100644 > > --- a/tools/libxl/libxl_dm.c > > +++ b/tools/libxl/libxl_dm.c > > @@ -984,6 +984,8 @@ static void stubdom_pvqemu_cb(libxl__egc *egc, > > static void spawn_stubdom_pvqemu_destroy_cb(libxl__egc *egc, > > libxl__destroy_domid_state > > *dis, > > int rc); > > +static void stubdom_xswait_cb(libxl__egc *egc, libxl__xswait_state *xswait, > > + int rc, const char *p); > > > > char *libxl__stub_dm_name(libxl__gc *gc, const char *guest_name) > > { > > @@ -1273,16 +1275,51 @@ static void stubdom_pvqemu_cb(libxl__egc *egc, > > rc = libxl_domain_unpause(CTX, dm_domid); > > if (rc) goto out; > > > > + libxl__xswait_init(&sdss->xswait); > > + sdss->xswait.ao = ao; > > + sdss->xswait.what = GCSPRINTF("Stubdom %d startup", dm_domid); > > Maybe include the domid too, e.g. "Stubdom %d for dom %d startup"? > > (And probably %u throughout?) > Ack. > > +static void stubdom_xswait_cb(libxl__egc *egc, libxl__xswait_state *xswait, > > + int rc, const char *p) > > +{ > > + EGC_GC; > > + libxl__stub_dm_spawn_state *sdss = CONTAINER_OF(xswait, *sdss, xswait); > > + uint32_t dm_domid = sdss->pvqemu.guest_domid; > > + > > + if (rc) { > > + if (rc == ERROR_TIMEDOUT) > > + LOG(ERROR, "%s: startup timed out", xswait->what); > > + goto out; > > + } > > + > > + if (!p) return; > > + > > + if (strcmp(p, "running")) > > + return; > > out: > > if (rc) { > > if (dm_domid) { > > - sdss->dis.ao = ao; > > + sdss->dis.ao = sdss->dm.spawn.ao; > > sdss->dis.domid = dm_domid; > > sdss->dis.callback = spawn_stubdom_pvqemu_destroy_cb; > > libxl__destroy_domid(egc, &sdss->dis); > > + libxl__xswait_stop(gc, xswait); > > Can you do this once befire the if (rc)? > I think so. Wei. > Ian. > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |