On Mon, 26 Jul 2010, Ian Campbell wrote:
> # HG changeset patch
> # User Ian Campbell <ian.campbell@xxxxxxxxxx>
> # Date 1280140562 -3600
> # Node ID f6300d42a667cf6a1a02fc065ecd9eaea0e10ecc
> # Parent 7a0c37f2a9b51ac012a32bcf6ab222580e7cac94
> libxl: return libxl_dominfo from libxl_event_get_domain_death_info
>
> Removes a libxc data type from the libxl interface.
>
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
>
> diff -r 7a0c37f2a9b5 -r f6300d42a667 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c Mon Jul 26 11:36:02 2010 +0100
> +++ b/tools/libxl/libxl.c Mon Jul 26 11:36:02 2010 +0100
> @@ -405,8 +405,6 @@ static void xcinfo2xlinfo(const xc_domai
> static void xcinfo2xlinfo(const xc_domaininfo_t *xcinfo,
> struct libxl_dominfo *xlinfo)
> {
> - unsigned int shutdown_reason;
> -
> memcpy(&(xlinfo->uuid), xcinfo->handle, sizeof(xen_domain_handle_t));
> xlinfo->domid = xcinfo->domain;
>
> @@ -416,12 +414,28 @@ static void xcinfo2xlinfo(const xc_domai
> xlinfo->blocked = !!(xcinfo->flags&XEN_DOMINF_blocked);
> xlinfo->running = !!(xcinfo->flags&XEN_DOMINF_running);
> xlinfo->crashed = 0;
> + xlinfo->shutdown_reason = -1;
>
> - shutdown_reason = (xcinfo->flags>>XEN_DOMINF_shutdownshift) &
> XEN_DOMINF_shutdownmask;
> -
> - if ( xlinfo->shutdown && (shutdown_reason == SHUTDOWN_crash) ) {
> - xlinfo->shutdown = 0;
> - xlinfo->crashed = 1;
> + if (xlinfo->shutdown) {
> + switch ((xcinfo->flags>>XEN_DOMINF_shutdownshift) &
> XEN_DOMINF_shutdownmask) {
> + case SHUTDOWN_poweroff:
> + xlinfo->shutdown_reason = LIBXL_SHUTDOWN_POWEROFF;
> + break;
> + case SHUTDOWN_reboot:
> + xlinfo->shutdown_reason = LIBXL_SHUTDOWN_REBOOT;
> + break;
> + case SHUTDOWN_suspend:
> + xlinfo->shutdown_reason = LIBXL_SHUTDOWN_SUSPEND;
> + break;
> + case SHUTDOWN_crash:
> + xlinfo->shutdown_reason = LIBXL_SHUTDOWN_CRASH;
> + xlinfo->shutdown = 0;
> + xlinfo->crashed = 1;
do we still need xlinfo->crashed, now that we have
xlinfo->shutdown_reason?
> + break;
> + case SHUTDOWN_watchdog:
> + xlinfo->shutdown_reason = LIBXL_SHUTDOWN_WATCHDOG;
> + break;
> + }
> }
>
> xlinfo->max_memkb = PAGE_TO_MEMKB(xcinfo->tot_pages);
> @@ -707,20 +721,19 @@ int libxl_free_waiter(libxl_waiter *wait
> return 0;
> }
>
> -int libxl_event_get_domain_death_info(struct libxl_ctx *ctx, uint32_t domid,
> libxl_event *event, xc_domaininfo_t *info)
> +int libxl_event_get_domain_death_info(struct libxl_ctx *ctx, uint32_t domid,
> libxl_event *event, struct libxl_dominfo *info)
> {
> int rc = 0, ret;
> + if (event && event->type == LIBXL_EVENT_DOMAIN_DEATH) {
> + ret = libxl_domain_info(ctx, info, domid);
>
> - if (event && event->type == LIBXL_EVENT_DOMAIN_DEATH) {
> - ret = xc_domain_getinfolist(ctx->xch, domid, 1, info);
> - if (ret == 1 && info->domain == domid) {
> - if (info->flags & XEN_DOMINF_running ||
> - (!(info->flags & XEN_DOMINF_shutdown) && !(info->flags &
> XEN_DOMINF_dying)))
> + if (ret == 0 && info->domid == domid) {
> + if (info->running || (!info->shutdown && !info->dying &&
> !info->crashed))
> goto out;
> rc = 1;
> goto out;
> }
> - memset(info, 0, sizeof(xc_dominfo_t));
> + memset(info, 0, sizeof(*info));
> rc = 1;
> goto out;
> }
> diff -r 7a0c37f2a9b5 -r f6300d42a667 tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h Mon Jul 26 11:36:02 2010 +0100
> +++ b/tools/libxl/libxl.h Mon Jul 26 11:36:02 2010 +0100
> @@ -22,6 +22,14 @@
> #include <xs.h>
> #include <sys/wait.h> /* for pid_t */
>
> +enum libxl_shutdown_reason {
> + LIBXL_SHUTDOWN_POWEROFF, /* Domain exited normally. Clean up and kill.
> */
> + LIBXL_SHUTDOWN_REBOOT, /* Clean up, kill, and then restart.
> */
> + LIBXL_SHUTDOWN_SUSPEND, /* Clean up, save suspend info, kill.
> */
> + LIBXL_SHUTDOWN_CRASH, /* Tell controller we've crashed.
> */
> + LIBXL_SHUTDOWN_WATCHDOG, /* Restart because watchdog time expired.
> */
> +};
> +
> struct libxl_dominfo {
> uint8_t uuid[16];
> uint32_t domid;
> @@ -31,6 +39,8 @@ struct libxl_dominfo {
> uint8_t shutdown:1;
> uint8_t crashed:1;
> uint8_t dying:1;
> + enum libxl_shutdown_reason shutdown_reason;
> +
> uint64_t max_memkb;
> uint64_t cpu_time;
> uint32_t vcpu_max_id;
> @@ -385,7 +395,7 @@ int libxl_free_event(libxl_event *event)
> int libxl_free_event(libxl_event *event);
> int libxl_free_waiter(libxl_waiter *waiter);
>
> -int libxl_event_get_domain_death_info(struct libxl_ctx *ctx, uint32_t domid,
> libxl_event *event, xc_domaininfo_t *info);
> +int libxl_event_get_domain_death_info(struct libxl_ctx *ctx, uint32_t domid,
> libxl_event *event, struct libxl_dominfo *info);
> int libxl_event_get_disk_eject_info(struct libxl_ctx *ctx, uint32_t domid,
> libxl_event *event, libxl_device_disk *disk);
>
> int libxl_domain_rename(struct libxl_ctx *ctx, uint32_t domid,
> diff -r 7a0c37f2a9b5 -r f6300d42a667 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c Mon Jul 26 11:36:02 2010 +0100
> +++ b/tools/libxl/xl_cmdimpl.c Mon Jul 26 11:36:02 2010 +0100
> @@ -1335,7 +1335,7 @@ start:
> while (1) {
> int ret;
> fd_set rfds;
> - xc_domaininfo_t info;
> + struct libxl_dominfo info;
> libxl_event event;
> libxl_device_disk disk;
> memset(&info, 0x00, sizeof(xc_domaininfo_t));
> @@ -1351,11 +1351,10 @@ start:
> case LIBXL_EVENT_DOMAIN_DEATH:
> if (libxl_event_get_domain_death_info(&ctx, domid, &event,
> &info)) {
> LOG("Domain %d is dead", domid);
> - if (info.flags & XEN_DOMINF_dying || (info.flags &
> XEN_DOMINF_shutdown && (((info.flags >> XEN_DOMINF_shutdownshift) &
> XEN_DOMINF_shutdownmask) != SHUTDOWN_suspend))) {
> + if (info.crashed || info.dying || (info.shutdown &&
> info.shutdown_reason != SHUTDOWN_suspend)) {
shouldn't this be LIBXL_SHUTDOWN_SUSPEND
> LOG("Domain %d needs to be clean: destroying the
> domain", domid);
> libxl_domain_destroy(&ctx, domid, 0);
> - if (info.flags & XEN_DOMINF_shutdown &&
> - (((info.flags >> XEN_DOMINF_shutdownshift) &
> XEN_DOMINF_shutdownmask) == SHUTDOWN_reboot)) {
> + if (info.shutdown && info.shutdown_reason ==
> SHUTDOWN_reboot) {
shouldn't this be LIBXL_SHUTDOWN_REBOOT?
It seems that both SHUDOWN_ are removed in following patches anyway, in
that case it is Ok I guess.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|