Remus: fix shadow memory allocation, broken by 20558:4ed3b9b1de3f
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 3 Dec 2009 13:50:14 +0000 (13:50 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 3 Dec 2009 13:50:14 +0000 (13:50 +0000)
This approach is perhaps a little cleaner than directly calling
balloon.free.

Signed-off-by: Brendan Cully <brendan@cs.ubc.ca>
tools/python/xen/remus/vm.py

index 47a01ee1ba96a2e8f0fdad28096a4dd15e046dd3..dd52148efc0347590235293d4f724e8e3f683102 100644 (file)
@@ -3,9 +3,8 @@
 import xmlrpclib
 
 from xen.xend.XendClient import server
-from xen.xend import sxp
-# XXX XendDomain is voodoo to let balloon import succeed
-from xen.xend import XendDomain, balloon
+from xen.xend import sxp, osdep
+from xen.lowlevel.xc import xc
 
 import vif
 import blkdev
@@ -150,7 +149,13 @@ def getshadowmem(vm):
     # from XendDomainInfo.checkLiveMigrateMemory:
     # 1MB per vcpu plus 4Kib/Mib of RAM.  This is higher than
     # the minimum that Xen would allocate if no value were given.
-    needed = vcpus * 1024 + maxmem * 4 - shadow * 1024
+    shadowneeded = vcpus * 1024 + maxmem * 4 - shadow * 1024
+    physinfo = xc().physinfo()
+    freemem = int(physinfo['free_memory'])
+    needed = shadowneeded - freemem
     if needed > 0:
         print "Freeing %d kB for shadow mode" % needed
-        balloon.free(needed, vm.dominfo)
+        dom0cur = osdep.lookup_balloon_stat('current')
+        # target is in MB, not KB
+        target = (dom0cur - needed) / 1024
+        server.xend.domain.setMemoryTarget(0, target)