[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 12/35] libxl: events: Make timeout and async exec setup take an ao, not a gc
On 06/26/2015 01:44 AM, Ian Jackson wrote: > Change the timeout setup functions to take a libxl__ao, not a > libxl__gc. This is going to be needed for ao abort, because timeouts > are going to be a main hook for ao abort requests - so the timeouts > need to be associated with an ao. > > This means that timeouts can only occur as part of a long-running > libxl function (but this is of course correct, as libxl shouldn't have > any global timeouts, and indeed all the call sites have an ao). > > Also remove the gc parameter from libxl__async_exec_start. It can > just use the gc from the ao supplied in the aes. > > All the callers follow the obvious patterns and therefore supply the > ao's gc to libxl__async_exec_start and the timeout setup functions. > There is therefore no functional change in this patch. Sorry, I just reviewed this patch, and don't do a building test. libxl__async_exec_start() is also used in libxl_netbuffer.c. Thanks Wen Congyang > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > CC: Yang Hongyang <yanghy@xxxxxxxxxxxxxx> > CC: Wen Congyang <wency@xxxxxxxxxxxxxx> > CC: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> > Acked-by: Wen Congyang <wency@xxxxxxxxxxxxxx> > Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > --- > v2: This patch split off from "Permit timeouts to signal cancellation". > Rebased; consequently, deal with libxl__async_exec_start. > CC'd authors of the libxl__async_exec_* functions. > --- > tools/libxl/libxl_aoutils.c | 8 +++++--- > tools/libxl/libxl_device.c | 4 ++-- > tools/libxl/libxl_dom.c | 8 ++++---- > tools/libxl/libxl_event.c | 6 ++++-- > tools/libxl/libxl_internal.h | 6 +++--- > tools/libxl/libxl_remus_disk_drbd.c | 2 +- > tools/libxl/libxl_test_timedereg.c | 9 +++++---- > 7 files changed, 24 insertions(+), 19 deletions(-) > > diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c > index ef679dd..1502ffe 100644 > --- a/tools/libxl/libxl_aoutils.c > +++ b/tools/libxl/libxl_aoutils.c > @@ -46,7 +46,7 @@ int libxl__xswait_start(libxl__gc *gc, libxl__xswait_state > *xswa) > { > int rc; > > - rc = libxl__ev_time_register_rel(gc, &xswa->time_ev, > + rc = libxl__ev_time_register_rel(xswa->ao, &xswa->time_ev, > xswait_timeout_callback, > xswa->timeout_ms); > if (rc) goto err; > > @@ -547,16 +547,18 @@ void libxl__async_exec_init(libxl__async_exec_state > *aes) > libxl__ev_child_init(&aes->child); > } > > -int libxl__async_exec_start(libxl__gc *gc, libxl__async_exec_state *aes) > +int libxl__async_exec_start(libxl__async_exec_state *aes) > { > pid_t pid; > > /* Convenience aliases */ > + libxl__ao *ao = aes->ao; > + AO_GC; > libxl__ev_child *const child = &aes->child; > char ** const args = aes->args; > > /* Set execution timeout */ > - if (libxl__ev_time_register_rel(gc, &aes->time, > + if (libxl__ev_time_register_rel(ao, &aes->time, > async_exec_timeout, > aes->timeout_ms)) { > LOG(ERROR, "unable to register timeout for executing: %s", > aes->what); > diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c > index 951d125..b6276f6 100644 > --- a/tools/libxl/libxl_device.c > +++ b/tools/libxl/libxl_device.c > @@ -808,7 +808,7 @@ void libxl__initiate_device_remove(libxl__egc *egc, > * TODO: 4.2 Bodge due to QEMU, see comment on top of > * libxl__initiate_device_remove in libxl_internal.h > */ > - rc = libxl__ev_time_register_rel(gc, &aodev->timeout, > + rc = libxl__ev_time_register_rel(ao, &aodev->timeout, > device_qemu_timeout, > LIBXL_QEMU_BODGE_TIMEOUT * > 1000); > if (rc) { > @@ -1034,7 +1034,7 @@ static void device_hotplug(libxl__egc *egc, > libxl__ao_device *aodev) > aes->stdfds[1] = 2; > aes->stdfds[2] = -1; > > - rc = libxl__async_exec_start(gc, aes); > + rc = libxl__async_exec_start(aes); > if (rc) > goto out; > > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index ccbcb6e..40a2d79 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -1200,7 +1200,7 @@ static void > domain_suspend_switch_qemu_xen_traditional_logdirty > switch_logdirty_xswatch, lds->ret_path); > if (rc) goto out; > > - rc = libxl__ev_time_register_rel(gc, &lds->timeout, > + rc = libxl__ev_time_register_rel(ao, &lds->timeout, > switch_logdirty_timeout, 10*1000); > if (rc) goto out; > > @@ -1480,7 +1480,7 @@ static void domain_suspend_callback_common(libxl__egc > *egc, > rc = libxl__ev_evtchn_wait(gc, &dss->guest_evtchn); > if (rc) goto err; > > - rc = libxl__ev_time_register_rel(gc, &dss->guest_timeout, > + rc = libxl__ev_time_register_rel(ao, &dss->guest_timeout, > suspend_common_wait_guest_timeout, > 60*1000); > if (rc) goto err; > @@ -1611,7 +1611,7 @@ static void domain_suspend_common_wait_guest(libxl__egc > *egc, > "@releaseDomain"); > if (rc) goto err; > > - rc = libxl__ev_time_register_rel(gc, &dss->guest_timeout, > + rc = libxl__ev_time_register_rel(ao, &dss->guest_timeout, > suspend_common_wait_guest_timeout, > 60*1000); > if (rc) goto err; > @@ -1990,7 +1990,7 @@ static void remus_devices_commit_cb(libxl__egc *egc, > */ > > /* Set checkpoint interval timeout */ > - rc = libxl__ev_time_register_rel(gc, &dss->checkpoint_timeout, > + rc = libxl__ev_time_register_rel(ao, &dss->checkpoint_timeout, > remus_next_checkpoint, > dss->interval); > > diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c > index 4b234a3..217fe97 100644 > --- a/tools/libxl/libxl_event.c > +++ b/tools/libxl/libxl_event.c > @@ -332,10 +332,11 @@ static void time_done_debug(libxl__gc *gc, const char > *func, > #endif > } > > -int libxl__ev_time_register_abs(libxl__gc *gc, libxl__ev_time *ev, > +int libxl__ev_time_register_abs(libxl__ao *ao, libxl__ev_time *ev, > libxl__ev_time_callback *func, > struct timeval absolute) > { > + AO_GC; > int rc; > > CTX_LOCK; > @@ -356,10 +357,11 @@ int libxl__ev_time_register_abs(libxl__gc *gc, > libxl__ev_time *ev, > } > > > -int libxl__ev_time_register_rel(libxl__gc *gc, libxl__ev_time *ev, > +int libxl__ev_time_register_rel(libxl__ao *ao, libxl__ev_time *ev, > libxl__ev_time_callback *func, > int milliseconds /* as for poll(2) */) > { > + AO_GC; > struct timeval absolute; > int rc; > > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h > index b445a51..8c38eab 100644 > --- a/tools/libxl/libxl_internal.h > +++ b/tools/libxl/libxl_internal.h > @@ -791,10 +791,10 @@ static inline void libxl__ev_fd_init(libxl__ev_fd *efd) > static inline int libxl__ev_fd_isregistered(const libxl__ev_fd *efd) > { return efd->fd >= 0; } > > -_hidden int libxl__ev_time_register_rel(libxl__gc*, libxl__ev_time *ev_out, > +_hidden int libxl__ev_time_register_rel(libxl__ao*, libxl__ev_time *ev_out, > libxl__ev_time_callback*, > int milliseconds /* as for poll(2) > */); > -_hidden int libxl__ev_time_register_abs(libxl__gc*, libxl__ev_time *ev_out, > +_hidden int libxl__ev_time_register_abs(libxl__ao*, libxl__ev_time *ev_out, > libxl__ev_time_callback*, > struct timeval); > _hidden int libxl__ev_time_modify_rel(libxl__gc*, libxl__ev_time *ev, > @@ -2166,7 +2166,7 @@ struct libxl__async_exec_state { > }; > > void libxl__async_exec_init(libxl__async_exec_state *aes); > -int libxl__async_exec_start(libxl__gc *gc, libxl__async_exec_state *aes); > +int libxl__async_exec_start(libxl__async_exec_state *aes); > bool libxl__async_exec_inuse(const libxl__async_exec_state *aes); > > /*----- device addition/removal -----*/ > diff --git a/tools/libxl/libxl_remus_disk_drbd.c > b/tools/libxl/libxl_remus_disk_drbd.c > index afe9b61..5e0c9a6 100644 > --- a/tools/libxl/libxl_remus_disk_drbd.c > +++ b/tools/libxl/libxl_remus_disk_drbd.c > @@ -120,7 +120,7 @@ static void match_async_exec(libxl__egc *egc, > libxl__remus_device *dev) > aes->stdfds[1] = -1; > aes->stdfds[2] = -1; > > - rc = libxl__async_exec_start(gc, aes); > + rc = libxl__async_exec_start(aes); > if (rc) > goto out; > > diff --git a/tools/libxl/libxl_test_timedereg.c > b/tools/libxl/libxl_test_timedereg.c > index a44639f..e2cc27d 100644 > --- a/tools/libxl/libxl_test_timedereg.c > +++ b/tools/libxl/libxl_test_timedereg.c > @@ -30,12 +30,13 @@ static int seq; > static void occurs(libxl__egc *egc, libxl__ev_time *ev, > const struct timeval *requested_abs); > > -static void regs(libxl__gc *gc, int j) > +static void regs(libxl__ao *ao, int j) > { > + AO_GC; > int rc, i; > LOG(DEBUG,"regs(%d)", j); > for (i=0; i<NTIMES; i++) { > - rc = libxl__ev_time_register_rel(gc, &et[j][i], occurs, ms[j][i]); > + rc = libxl__ev_time_register_rel(ao, &et[j][i], occurs, ms[j][i]); > assert(!rc); > } > } > @@ -52,7 +53,7 @@ int libxl_test_timedereg(libxl_ctx *ctx, libxl_asyncop_how > *ao_how) > libxl__ev_time_init(&et[1][i]); > } > > - regs(gc, 0); > + regs(ao, 0); > > return AO_INPROGRESS; > } > @@ -71,7 +72,7 @@ static void occurs(libxl__egc *egc, libxl__ev_time *ev, > assert(ev == &et[0][1]); > libxl__ev_time_deregister(gc, &et[0][0]); > libxl__ev_time_deregister(gc, &et[0][2]); > - regs(gc, 1); > + regs(tao, 1); > libxl__ev_time_deregister(gc, &et[0][1]); > break; > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |