On Thu, Aug 13, 2009 at 01:08:01PM +0200, Daniel Veillard wrote:
On Thu, Aug 13, 2009 at 11:58:16AM +0100, Daniel P. Berrange wrote:
> commit e2052c24f39c71b3b8e92a983287f72176d73c77
> Author: Daniel P. Berrange <berrange(a)redhat.com>
> Date: Thu Aug 13 11:56:31 2009 +0100
>
> Make LXC / UML drivers robust against NUMA topology brokenness
>
> Some kernel versions expose broken NUMA topology for some machines.
> This causes the LXC/UML drivers to fail to start. QEMU driver was
> already fixed for this problem
>
> * src/lxc_conf.c: Log and ignore failure to populate NUMA info
> * src/uml_conf.c: Log and ignore failure to populate NUMA info
>
> + /* Some machines have problematic NUMA toplogy causing
> + * unexpected failures. We don't want to break the QEMU
> + * driver in this scenario, so log errors & carry on
> + */
> + if (nodeCapsInitNUMA(caps) < 0) {
> + virCapabilitiesFreeNUMAInfo(caps);
Hum, right now this doesn't reset caps.nnumaCell
> + VIR_WARN0("Failed to query host NUMA topology, disabling NUMA
capabilities");
> + }
>
> /* XXX shouldn't 'borrow' KVM's prefix */
> virCapabilitiesSetMacPrefix(caps, (unsigned char []){ 0x52, 0x54, 0x00 });
> diff --git a/src/uml_conf.c b/src/uml_conf.c
> index 48e05a8..4f756d4 100644
> --- a/src/uml_conf.c
> +++ b/src/uml_conf.c
> @@ -45,6 +45,7 @@
> #include "nodeinfo.h"
> #include "verify.h"
> #include "bridge.h"
> +#include "logging.h"
>
> #define VIR_FROM_THIS VIR_FROM_UML
>
> @@ -63,8 +64,14 @@ virCapsPtr umlCapsInit(void) {
> 0, 0)) == NULL)
> goto no_memory;
>
> - if (nodeCapsInitNUMA(caps) < 0)
> - goto no_memory;
> + /* Some machines have problematic NUMA toplogy causing
> + * unexpected failures. We don't want to break the QEMU
> + * driver in this scenario, so log errors & carry on
> + */
> + if (nodeCapsInitNUMA(caps) < 0) {
> + virCapabilitiesFreeNUMAInfo(caps);
> + VIR_WARN0("Failed to query host NUMA topology, disabling NUMA
capabilities");
> + }
>
> if ((guest = virCapabilitiesAddGuest(caps,
> "uml",
Patch looks fine but IMHO we should add
caps->host.nnumaCell = 0;
in virCapabilitiesFreeNUMAInfo() to be 100% sure
Yes, I've pushed it with that addition.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|