[Libvir] PATCH: Fix compat for Xen 3.2.0

Daniel P. Berrange berrange at redhat.com
Sun Jan 20 15:56:49 UTC 2008


On Sun, Jan 20, 2008 at 12:22:49PM +0000, Richard W.M. Jones wrote:
> Daniel P. Berrange wrote:
> >On Sat, Jan 19, 2008 at 09:21:07PM +0100, Jim Meyering wrote:
> >>"Daniel P. Berrange" <berrange at redhat.com> wrote:
> >>
> >>>Xen 3.2.0 removed the sockets_per_node field from the nodeinfo data 
> >>>returned
> >>>by XenD. I previously add compat for this, but got it in the wrong place
> >>>so it would most likely end up in a divide-by-zero error. This patch
> >>>re-arranges it to be correct.
> >>>
> >>>diff -rup libvirt-0.4.0.orig/src/xend_internal.c 
> >>>libvirt-0.4.0.new/src/xend_internal.c
> >>>--- libvirt-0.4.0.orig/src/xend_internal.c	2007-12-17 
> >>>18:05:27.000000000 -0500
> >>>+++ libvirt-0.4.0.new/src/xend_internal.c	2008-01-18 
> >>>21:13:30.000000000 -0500
> >>>@@ -1907,6 +1907,9 @@ 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");
> >>>+    info->cores = sexpr_int(root, "node/cores_per_socket");
> >>>+    info->threads = sexpr_int(root, "node/threads_per_core");
> >>>+
> >>>     /* 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
> >>>@@ -1921,8 +1924,6 @@ sexpr_to_xend_node_info(struct sexpr *ro
> >>>         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);
> >>> }
> >>ACK.
> >>
> >>Now that you mention divide-by-zero,
> >>is there something that guarantees none of the
> >>terms in the denominator there is zero?
> >>
> >>        info->sockets = nr_cpus / (info->nodes * info->cores * 
> >>        info->threads);
> >
> >You always have at least 1 numa node, at least 1 core, and at least 1
> >hyperthread, so you'd only get a zero in those if there was a bug in the
> >Xen hypervisor
> 
> .. And that would never happen :-)

Ok, ok :-)  I applied the fix with Jim's suggested sanity check for 0
to protect against future Xen bugs :-)

Regards,
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  -=| 




More information about the libvir-list mailing list