|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 12/32] libxl: Design of an async API to issue QMP commands to QEMUç
On Fri, Jul 27, 2018 at 03:05:54PM +0100, Anthony PERARD wrote:
> All the functions will be implemented in later patches.
>
> This patch includes the API that libxl can use to send QMP commands to
> QEMU.
>
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
> tools/libxl/libxl_internal.h | 76 +++++++++++++++++++++++++++++++++++-
> 1 file changed, 74 insertions(+), 2 deletions(-)
>
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index 5b71a23d23..c453ac10a5 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -202,6 +202,8 @@ typedef struct libxl__ao libxl__ao;
> typedef struct libxl__aop_occurred libxl__aop_occurred;
> typedef struct libxl__osevent_hook_nexus libxl__osevent_hook_nexus;
> typedef struct libxl__osevent_hook_nexi libxl__osevent_hook_nexi;
> +typedef struct libxl__json_object libxl__json_object;
> +typedef struct libxl__carefd libxl__carefd;
>
> typedef struct libxl__domain_create_state libxl__domain_create_state;
> typedef void libxl__domain_create_cb(struct libxl__egc *egc,
> @@ -357,6 +359,76 @@ struct libxl__ev_child {
> LIBXL_LIST_ENTRY(struct libxl__ev_child) entry;
> };
>
> +/*
> + * QMP asynchronous calls
> + */
Place the title in the same comment block?
> +/*
> + * This facility allows a command to be sent to QEMU, and the response to be
> + * handed to a callback function. Each libxl__ev_qmp handles zero or one
Do you really mean 'zero or one' or 'zero or more'?
> + * outstanding command.
> + *
> + * Commands can be chained, with a same connection. (e.g. "add-fd" will need
> to
^ the
> + * be chained to the next command). A libxl__ev_qmp can be reused when the
^ after
> + * callback is been called in order to use the same connection.
^ has
> + *
> + * Only one connection at a time can be made to one QEMU, so avoid keeping a
^ to
> + * libxl__ev_qmp Connected for to long and call libxl__ev_qmp_dispose as soon
^ unneeded cap ^ remove 'and'
> + * as it is not needed anymore.
> + *
> + * Possible states of a libxl__ev_qmp:
> + * Undefined
> + * Might contain anything.
> + * Idle
> + * Struct contents are defined enough to pass to any libxl__ev_qmp_*
> + * functions.
^ function
> + * The struct does not contain references to any allocated private
> resources
> + * so can be thrown away.
I would add '... can be thrown away without any teardown.'
> + * Active
> + * Currently waiting for the callback to be called.
> + * _dispose must be called to reclaim resources.
> + * Connected
> + * Struct contain allocated ressources.
> + * Calling _send() with this same ev will use the same QMP connection.
> + * _dispose() must be called to reclaim resources.
> + *
> + * libxl__ev_qmp_init: Undefined/Idle -> Idle
> + *
> + * libxl__ev_qmp_send: Idle/Connected -> Active (on error: Idle)
> + * Sends a command to QEMU.
> + * callback will be called when a response is received or when an error
> + * as occured.
> + *
> + * libxl__ev_qmp_dispose: Connected/Active/Idle -> Idle
> + *
> + * callback: When called: Active -> Connected
> + * When called, ev is Connected and can be reused or disposed of.
> + * When an error occured, it is called with response == NULL and the error
^ If
> + * code in rc.
> + * The callback is only called once.
> + */
> +typedef struct libxl__ev_qmp libxl__ev_qmp;
> +typedef void libxl__ev_qmp_callback(libxl__egc *egc, libxl__ev_qmp *ev,
> + const libxl__json_object *response,
> + int rc);
> +
> +_hidden void libxl__ev_qmp_init(libxl__ev_qmp *ev);
> +_hidden int libxl__ev_qmp_send(libxl__gc *gc, libxl__ev_qmp *ev,
> + const char *cmd, libxl__json_object *args);
> +_hidden void libxl__ev_qmp_dispose(libxl__gc *gc, libxl__ev_qmp *ev);
> +
> +struct libxl__ev_qmp {
> + /* caller should include this in their own struct */
> + /* caller must fill these in, and they must all remain valid */
^ no need for 'all'
> + uint32_t domid;
Strictly speaking domid is an uint16_t.
> + libxl__ev_qmp_callback *callback;
> + libxl__carefd *cfd; /* set to send a fd with the command, NULL otherwise
> */
> +
> + /* remaining fields are private to libxl_ev_qmp_* */
> +
Extra newline?
> + int id;
> +};
> +
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |