}
static void xcinfo2xlinfo(const xc_domaininfo_t *xcinfo,
- struct libxl_dominfo *xlinfo) {
+ struct libxl_dominfo *xlinfo)
+{
+ unsigned int shutdown_reason;
+
memcpy(&(xlinfo->uuid), xcinfo->handle, sizeof(xen_domain_handle_t));
xlinfo->domid = xcinfo->domain;
- if (xcinfo->flags & XEN_DOMINF_dying)
- xlinfo->dying = 1;
- else if (xcinfo->flags & XEN_DOMINF_paused)
- xlinfo->paused = 1;
- else if (xcinfo->flags & XEN_DOMINF_blocked ||
- xcinfo->flags & XEN_DOMINF_running)
- xlinfo->running = 1;
+ xlinfo->dying = !!(xcinfo->flags&XEN_DOMINF_dying);
+ xlinfo->shutdown = !!(xcinfo->flags&XEN_DOMINF_shutdown);
+ xlinfo->paused = !!(xcinfo->flags&XEN_DOMINF_paused);
+ xlinfo->blocked = !!(xcinfo->flags&XEN_DOMINF_blocked);
+ xlinfo->running = !!(xcinfo->flags&XEN_DOMINF_running);
+ xlinfo->crashed = 0;
+
+ shutdown_reason = (xcinfo->flags>>XEN_DOMINF_shutdownshift) & XEN_DOMINF_shutdownmask;
+
+ if ( xlinfo->shutdown && (shutdown_reason == SHUTDOWN_crash) ) {
+ xlinfo->shutdown = 0;
+ xlinfo->crashed = 1;
+ }
+
xlinfo->max_memkb = PAGE_TO_MEMKB(xcinfo->tot_pages);
xlinfo->cpu_time = xcinfo->cpu_time;
xlinfo->vcpu_max_id = xcinfo->max_vcpu_id;
}
printf("Name ID Mem VCPUs\tState\tTime(s)\n");
for (i = 0; i < nb_domain; i++) {
- printf("%-40s %5d %5lu %5d %c%c%c %8.1f",
+ printf("%-40s %5d %5lu %5d %c%c%c%c%c%c %8.1f",
libxl_domid_to_name(&ctx, info[i].domid),
info[i].domid,
(unsigned long) (info[i].max_memkb / 1024),
info[i].vcpu_online,
info[i].running ? 'r' : '-',
+ info[i].blocked ? 'b' : '-',
info[i].paused ? 'p' : '-',
+ info[i].shutdown ? 's' : '-',
+ info[i].crashed ? 'c' : '-',
info[i].dying ? 'd' : '-',
((float)info[i].cpu_time / 1e9));
if (verbose) {