In Xen 3.2.0 the physinfo hypercall was changed to remove the field 'sockets_per_node' and add in 'nr_cpus'. We use the sockets_per_node field in livirt for the virNodeInfo struct :-( This patch re-calculates its value in terms of 'nr_cpus / (nodes*cores*threads)' which is how older Xen used to figure it out. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
Index: src/xend_internal.c =================================================================== RCS file: /data/cvs/libvirt/src/xend_internal.c,v retrieving revision 1.157 diff -u -p -r1.157 xend_internal.c --- src/xend_internal.c 5 Dec 2007 18:28:05 -0000 1.157 +++ src/xend_internal.c 17 Dec 2007 19:16:32 -0000 @@ -1893,11 +1893,11 @@ sexpr_to_xend_node_info(struct sexpr *ro 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 +1905,20 @@ sexpr_to_xend_node_info(struct sexpr *ro 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);
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list