[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] xl: Don't output a broken result if error occurs in 'xl info'



If error occurs in 'xl info', we'd better output an error message
rather than a broken result.

Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>

diff -r c87ec146229a -r 3f97bcb08bbd tools/libxl/xl.c
--- a/tools/libxl/xl.c  Fri Apr 23 15:04:26 2010 +0100
+++ b/tools/libxl/xl.c  Tue Apr 27 01:11:06 2010 +0800
@@ -2642,93 +2642,88 @@
     exit(0);
 }
 
-static void output_xeninfo(void)
+static void output_info(struct utsname *utsinfo, struct libxl_physinfo 
*physinfo,
+                        const libxl_version_info *verinfo)
 {
-    const libxl_version_info *info;
+    unsigned int i;
     int sched_id;
 
-    info = libxl_get_version_info(&ctx);
     if ((sched_id = libxl_get_sched_id(&ctx)) < 0) {
         fprintf(stderr, "get_sched_id sysctl failed.\n");
         return;
     }
 
-    printf("xen_major              : %d\n", info->xen_version_major);
-    printf("xen_minor              : %d\n", info->xen_version_minor);
-    printf("xen_extra              : %s\n", info->xen_version_extra);
-    printf("xen_caps               : %s\n", info->capabilities);
+    // output utsinfo
+    printf("host                   : %s\n", utsinfo->nodename);
+    printf("release                : %s\n", utsinfo->release);
+    printf("version                : %s\n", utsinfo->version);
+    printf("machine                : %s\n", utsinfo->machine);
+
+    // output physinfo
+    printf("nr_cpus                : %d\n", physinfo->nr_cpus);
+    printf("nr_nodes               : %d\n", physinfo->nr_nodes);
+    printf("cores_per_socket       : %d\n", physinfo->cores_per_socket);
+    printf("threads_per_core       : %d\n", physinfo->threads_per_core);
+    printf("cpu_mhz                : %d\n", physinfo->cpu_khz / 1000);
+    printf("hw_caps                : ");
+    for (i = 0; i < 8; i++)
+        printf("%08x%c", physinfo->hw_cap[i], i < 7 ? ':' : '\n');
+    printf("virt_caps              :");
+    if (physinfo->phys_cap & XEN_SYSCTL_PHYSCAP_hvm)
+        printf(" hvm");
+    if (physinfo->phys_cap & XEN_SYSCTL_PHYSCAP_hvm_directio)
+        printf(" hvm_directio");
+    printf("\n");
+    if (!verinfo)
+        return;
+    i = (1 << 20) / verinfo->pagesize;
+    printf("total_memory           : %llu\n", (long long unsigned int) 
physinfo->total_pages / i);
+    printf("free_memory            : %llu\n", (long long unsigned int) 
physinfo->free_pages / i);
+
+    // output verinfo
+    printf("xen_major              : %d\n", verinfo->xen_version_major);
+    printf("xen_minor              : %d\n", verinfo->xen_version_minor);
+    printf("xen_extra              : %s\n", verinfo->xen_version_extra);
+    printf("xen_caps               : %s\n", verinfo->capabilities);
     printf("xen_scheduler          : %s\n",
         sched_id == XEN_SCHEDULER_SEDF ? "sedf" :
         sched_id == XEN_SCHEDULER_CREDIT ? "credit" :
         sched_id == XEN_SCHEDULER_CREDIT2 ? "credit2" : "unknown");
-    printf("xen_pagesize           : %lu\n", info->pagesize);
-    printf("platform_params        : virt_start=0x%lx\n", info->virt_start);
-    printf("xen_changeset          : %s\n", info->changeset);
-    printf("xen_commandline        : %s\n", info->commandline);
-    printf("cc_compiler            : %s\n", info->compiler);
-    printf("cc_compile_by          : %s\n", info->compile_by);
-    printf("cc_compile_domain      : %s\n", info->compile_domain);
-    printf("cc_compile_date        : %s\n", info->compile_date);
+    printf("xen_pagesize           : %lu\n", verinfo->pagesize);
+    printf("platform_params        : virt_start=0x%lx\n", verinfo->virt_start);
+    printf("xen_changeset          : %s\n", verinfo->changeset);
+    printf("xen_commandline        : %s\n", verinfo->commandline);
+    printf("cc_compiler            : %s\n", verinfo->compiler);
+    printf("cc_compile_by          : %s\n", verinfo->compile_by);
+    printf("cc_compile_domain      : %s\n", verinfo->compile_domain);
+    printf("cc_compile_date        : %s\n", verinfo->compile_date);
 
-    return;
-}
-
-static void output_nodeinfo(void)
-{
-    struct utsname utsbuf;
-
-    uname(&utsbuf);
-
-    printf("host                   : %s\n", utsbuf.nodename);
-    printf("release                : %s\n", utsbuf.release);
-    printf("version                : %s\n", utsbuf.version);
-    printf("machine                : %s\n", utsbuf.machine);
-
-    return;
-}
-
-static void output_physinfo(void)
-{
-    struct libxl_physinfo info;
-    const libxl_version_info *vinfo;
-    unsigned int i;
-
-    if (libxl_get_physinfo(&ctx, &info) != 0) {
-        fprintf(stderr, "libxl_physinfo failed.\n");
-        return;
-    }
-
-    printf("nr_cpus                : %d\n", info.nr_cpus);
-    printf("nr_nodes               : %d\n", info.nr_nodes);
-    printf("cores_per_socket       : %d\n", info.cores_per_socket);
-    printf("threads_per_core       : %d\n", info.threads_per_core);
-    printf("cpu_mhz                : %d\n", info.cpu_khz / 1000);
-    printf("hw_caps                : ");
-    for (i = 0; i < 8; i++)
-        printf("%08x%c", info.hw_cap[i], i < 7 ? ':' : '\n');
-    printf("virt_caps              :");
-    if (info.phys_cap & XEN_SYSCTL_PHYSCAP_hvm)
-        printf(" hvm");
-    if (info.phys_cap & XEN_SYSCTL_PHYSCAP_hvm_directio)
-        printf(" hvm_directio");
-    printf("\n");
-    vinfo = libxl_get_version_info(&ctx);
-    i = (1 << 20) / vinfo->pagesize;
-    printf("total_memory           : %lu\n", info.total_pages / i);
-    printf("free_memory            : %lu\n", info.free_pages / i);
+    printf("xend_config_format     : 4\n");
 
     return;
 }
 
 void info(int verbose)
 {
-    output_nodeinfo();
+    struct utsname utsinfo;
+    struct libxl_physinfo physinfo;
+    const libxl_version_info *verinfo;
 
-    output_physinfo();
+    if (uname(&utsinfo) != 0) {
+        fprintf(stderr, "cannot get nodeinfo\n");
+        return;
+    }
+    if (libxl_get_physinfo(&ctx, &physinfo) != 0) {
+        fprintf(stderr, "libxl_physinfo failed.\n");
+        return;
+    }
+    verinfo = libxl_get_version_info(&ctx);
+    if (!verinfo) {
+        fprintf(stderr, "libxl_get_version_info failed.\n");
+        return;
+    }
 
-    output_xeninfo();
-
-    printf("xend_config_format     : 4\n");
+    output_info(&utsinfo, &physinfo, verinfo);
 
     return;
 }


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.