]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix nodeinfo compat with Xen 3.2.0
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 17 Dec 2007 23:04:33 +0000 (23:04 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 17 Dec 2007 23:04:33 +0000 (23:04 +0000)
ChangeLog
src/xend_internal.c

index 3750dd20c065956cb4a113ed1802670293a7fbb2..bcf8a142c2415a1cd0f814d40835c1b9573202fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Dec 17 18:03:00 UTC 2007 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/xend_internal.c: Compatability with Xen 3.2.0 changed
+       fields for physinfo data used by virNodeInfoPtr.
+
 Mon Dec 17 17:38:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com>
 
        Fix remote_internal.c error handling of qparam_get_query
index 9efd0e114cb062c3e0ee4cee641e93a632377316..8e4c3d5ed955223881c1dcb5b9f3ce5846004c5e 100644 (file)
@@ -1288,6 +1288,8 @@ xend_parse_sexp_desc_os(virConnectPtr xend, struct sexpr *node, virBufferPtr buf
     if (hvm) {
         virBufferVSprintf(buf, "    <type>hvm</type>\n");
         tmp = sexpr_node(node, "domain/image/hvm/kernel");
+        if (tmp == NULL)
+            tmp = sexpr_node(node, "domain/image/hvm/loader");
         if (tmp == NULL && !bootloader) {
             virXendError(xend, VIR_ERR_INTERNAL_ERROR,
                          _("domain information incomplete, missing kernel & bootloader"));
@@ -1893,11 +1895,11 @@ sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info)
         return (-1);
 
     machine = sexpr_node(root, "node/machine");
-    if (machine == NULL)
+    if (machine == NULL) {
         info->model[0] = 0;
-    else {
+    else {
         snprintf(&info->model[0], sizeof(info->model) - 1, "%s", machine);
-       info->model[sizeof(info->model) - 1] = 0;
+        info->model[sizeof(info->model) - 1] = 0;
     }
     info->memory = (unsigned long) sexpr_u64(root, "node/total_memory") << 10;
 
@@ -1905,6 +1907,20 @@ sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info)
     info->mhz = sexpr_int(root, "node/cpu_mhz");
     info->nodes = sexpr_int(root, "node/nr_nodes");
     info->sockets = sexpr_int(root, "node/sockets_per_node");
+    /* Xen 3.2.0 replaces sockets_per_node with 'nr_cpus'.
+     * Old Xen calculated sockets_per_node using its internal
+     * nr_cpus / (nodes*cores*threads), so fake it ourselves
+     * in the same way
+     */
+    if (info->sockets == 0) {
+        int nr_cpus = sexpr_int(root, "node/nr_cpus");
+        info->sockets = nr_cpus / (info->nodes * info->cores * info->threads);
+        /* Should already be fine, but for sanity make
+         * sure we have at least one socket
+         */
+        if (info->sockets == 0)
+            info->sockets = 1;
+    }
     info->cores = sexpr_int(root, "node/cores_per_socket");
     info->threads = sexpr_int(root, "node/threads_per_core");
     return (0);