File 7e72ac78-qemu-numa-mem-fix.patch of Package libvirt.11695

commit 7e72ac787848b7434c9359a57c1e2789d92350f8
Author: Martin Kletzander <mkletzan@redhat.com>
Date:   Tue Jul 8 09:59:49 2014 +0200

    qemu: leave restricting cpuset.mems after initialization
    
    When domain is started with numatune memory mode strict and the
    nodeset does not include host NUMA node with DMA and DMA32 zones, KVM
    initialization fails.  This is because cgroup restrict even kernel
    allocations.  We are already doing numa_set_membind() which does the
    same thing, only it does not restrict kernel allocations.
    
    This patch leaves the userspace numa_set_membind() in place and moves
    the cpuset.mems setting after the point where monitor comes up, but
    before vcpu and emulator sub-groups are created.
    
    Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

Index: libvirt-1.2.5/src/qemu/qemu_cgroup.c
===================================================================
--- libvirt-1.2.5.orig/src/qemu/qemu_cgroup.c
+++ libvirt-1.2.5/src/qemu/qemu_cgroup.c
@@ -626,9 +626,6 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm
     if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
         return 0;
 
-    if (qemuSetupCpusetMems(vm, nodemask) < 0)
-        goto cleanup;
-
     if (vm->def->cpumask ||
         (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO)) {
 
@@ -828,6 +825,13 @@ qemuSetupCgroup(virQEMUDriverPtr driver,
 }
 
 int
+qemuSetupCgroupPostInit(virDomainObjPtr vm,
+                        virBitmapPtr nodemask)
+{
+    return qemuSetupCpusetMems(vm, nodemask);
+}
+
+int
 qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
                       unsigned long long period,
                       long long quota)
Index: libvirt-1.2.5/src/qemu/qemu_cgroup.h
===================================================================
--- libvirt-1.2.5.orig/src/qemu/qemu_cgroup.h
+++ libvirt-1.2.5/src/qemu/qemu_cgroup.h
@@ -1,7 +1,7 @@
 /*
  * qemu_cgroup.h: QEMU cgroup management
  *
- * Copyright (C) 2006-2007, 2009-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2007, 2009-2014 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -44,6 +44,8 @@ int qemuConnectCgroup(virQEMUDriverPtr d
 int qemuSetupCgroup(virQEMUDriverPtr driver,
                     virDomainObjPtr vm,
                     virBitmapPtr nodemask);
+int qemuSetupCgroupPostInit(virDomainObjPtr vm,
+                            virBitmapPtr nodemask);
 int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
                           unsigned long long period,
                           long long quota);
Index: libvirt-1.2.5/src/qemu/qemu_process.c
===================================================================
--- libvirt-1.2.5.orig/src/qemu/qemu_process.c
+++ libvirt-1.2.5/src/qemu/qemu_process.c
@@ -4105,6 +4105,10 @@ int qemuProcessStart(virConnectPtr conn,
     if (!qemuProcessVerifyGuestCPU(driver, vm))
         goto cleanup;
 
+    VIR_DEBUG("Setting up post-init cgroup restrictions");
+    if (qemuSetupCgroupPostInit(vm, nodemask) < 0)
+        goto cleanup;
+
     VIR_DEBUG("Detecting VCPU PIDs");
     if (qemuProcessDetectVcpuPIDs(driver, vm) < 0)
         goto cleanup;