From: Wen Congyang <wency@cn.fujitsu.com>
To: Ian Jackson <ian.jackson@eu.citrix.com>, xen-devel@lists.xensource.com
Cc: Wei Liu <wei.liu2@citrix.com>,
Yang Hongyang <yanghy@cn.fujitsu.com>,
Euan Harris <euan.harris@citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Lai Jiangshan <laijs@cn.fujitsu.com>
Subject: Re: [PATCH 12/35] libxl: events: Make timeout and async exec setup take an ao, not a gc
Date: Tue, 30 Jun 2015 14:02:52 +0800 [thread overview]
Message-ID: <5592310C.2080609@cn.fujitsu.com> (raw)
In-Reply-To: <1435254275-8184-13-git-send-email-ian.jackson@eu.citrix.com>
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@eu.citrix.com>
> CC: Yang Hongyang <yanghy@cn.fujitsu.com>
> CC: Wen Congyang <wency@cn.fujitsu.com>
> CC: Lai Jiangshan <laijs@cn.fujitsu.com>
> Acked-by: Wen Congyang <wency@cn.fujitsu.com>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
>
> ---
> 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;
>
>
next prev parent reply other threads:[~2015-06-30 6:02 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-25 17:44 [PATCH v4 00/35] libxl ao abort request (cancellation) Ian Jackson
2015-06-25 17:44 ` [PATCH 01/35] libxl: ao internal API docs: Mention synchronous ao completion Ian Jackson
2015-06-25 17:44 ` [PATCH 02/35] libxl: suspend: switch_logdirty_done takes rc Ian Jackson
2015-06-25 17:44 ` [PATCH 03/35] libxl: suspend: common suspend callbacks take rc Ian Jackson
2015-06-25 17:44 ` [PATCH 04/35] libxl: suspend: Return correct error from callbacks Ian Jackson
2015-06-25 17:44 ` [PATCH 05/35] libxl: Use libxl__xswait* in libxl__ao_device Ian Jackson
2015-06-25 17:44 ` [PATCH 06/35] libxl: xswait/devstate: Move xswait to before devstate Ian Jackson
2015-06-25 17:44 ` [PATCH 07/35] libxl: devstate: Use libxl__xswait* Ian Jackson
2015-06-25 17:44 ` [PATCH 08/35] libxl: Rename AO_ABORT to AO_CREATE_FAIL Ian Jackson
2015-06-26 14:10 ` Wei Liu
2015-06-25 17:44 ` [PATCH 09/35] libxl: Change some log messages to say `abandoning' rather than `aborting' Ian Jackson
2015-06-26 14:12 ` Wei Liu
2015-06-25 17:44 ` [PATCH 10/35] libxl: Change an internal comment to say `bail' rather than `abort' Ian Jackson
2015-06-26 14:13 ` Wei Liu
2015-06-25 17:44 ` [PATCH 11/35] libxl: New error codes ABORTED etc Ian Jackson
2015-06-26 14:13 ` Wei Liu
2015-06-25 17:44 ` [PATCH 12/35] libxl: events: Make timeout and async exec setup take an ao, not a gc Ian Jackson
2015-06-30 6:02 ` Wen Congyang [this message]
2015-06-30 9:14 ` Ian Jackson
2015-06-25 17:44 ` [PATCH 13/35] libxl: events: Make libxl__async_exec_* pass caller an rc Ian Jackson
2015-06-25 17:44 ` [PATCH 14/35] libxl: events: Permit timeouts to signal ao abort Ian Jackson
2015-06-25 17:44 ` [PATCH 15/35] libxl: spawn: Preserve rc in error path Ian Jackson
2015-06-26 14:28 ` Wei Liu
2015-06-25 17:44 ` [PATCH 16/35] libxl: domain create: Do not destroy on ao abort Ian Jackson
2015-06-25 17:44 ` [PATCH 17/35] libxl: ao: Record ultimate parent of a nested ao Ian Jackson
2015-06-25 17:44 ` [PATCH 18/35] libxl: ao: Count the nested progeny of an ao Ian Jackson
2015-06-25 17:44 ` [PATCH 19/35] libxl: ao: Provide manip_refcnt Ian Jackson
2015-06-26 14:33 ` Wei Liu
2015-06-26 15:02 ` Ian Jackson
2015-06-25 17:44 ` [PATCH 20/35] libxl: ao abort: Provide public ao abort request API Ian Jackson
2015-06-26 14:47 ` Wei Liu
2015-06-26 15:05 ` Ian Jackson
2015-06-26 15:13 ` Wei Liu
2015-06-26 15:30 ` Wei Liu
2015-06-25 17:44 ` [PATCH 21/35] libxl: ao abort: Provide explicit internal abort check API Ian Jackson
2015-06-25 17:44 ` [PATCH 22/35] libxl: ao abort: Make timeouts abortable Ian Jackson
2015-06-25 17:44 ` [PATCH 23/35] libxl: ao abort: Note that driver domain task cannot be usefully aborted Ian Jackson
2015-06-25 17:44 ` [PATCH 24/35] libxl: Introduce DOMAIN_DESTROYED error code Ian Jackson
2015-06-25 17:44 ` [PATCH 25/35] libxl: ao abort: Support aborting where we spot domain death Ian Jackson
2015-06-25 17:44 ` [PATCH 26/35] libxl: Introduce FILLZERO Ian Jackson
2015-06-25 17:44 ` [PATCH 27/35] libxl: ao abort: Preparations for save/restore abort Ian Jackson
2015-06-25 17:44 ` [PATCH 28/35] libxl: ao abort: Handle SIGTERM in save/restore helper Ian Jackson
2015-06-25 17:44 ` [PATCH 29/35] libxl: ao abort: Abort libxc save/restore Ian Jackson
2015-06-25 17:44 ` [PATCH 30/35] libxl: ao: datacopier callback gets an rc Ian Jackson
2015-06-25 17:44 ` [PATCH 31/35] libxl: ao abort: Make datacopiers abortable Ian Jackson
2015-06-25 17:44 ` [PATCH 32/35] libxl: Fix libxl__get_domid error reporting Ian Jackson
2015-06-26 14:54 ` Wei Liu
2015-06-25 17:44 ` [PATCH 33/35] libxl: spawn: Always debug log middle child process death Ian Jackson
2015-06-26 14:55 ` Wei Liu
2015-06-25 17:44 ` [PATCH 34/35] libxl: libxl__ev_child pass actual pid to callback Ian Jackson
2015-06-26 14:56 ` Wei Liu
2015-06-25 17:44 ` [PATCH 35/35] libxl: When save/restore helper dies, do not overwrite rc Ian Jackson
2015-06-26 14:56 ` Wei Liu
2015-06-26 10:19 ` [PATCH v4 00/35] libxl ao abort request (cancellation) Ian Jackson
2015-06-26 13:20 ` NUMA config handling bug on reuse of libxl domain config Ian Jackson
2015-06-26 15:57 ` Dario Faggioli
2015-06-26 15:40 ` [PATCH v4 00/35] libxl ao abort request (cancellation) Ian Jackson
2015-06-26 15:51 ` Ian Campbell
2015-06-26 15:56 ` Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5592310C.2080609@cn.fujitsu.com \
--to=wency@cn.fujitsu.com \
--cc=euan.harris@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=laijs@cn.fujitsu.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xensource.com \
--cc=yanghy@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.