diff -r 1de184deaa9c tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Wed Sep 06 13:16:02 2006 +0100 +++ b/tools/python/xen/xend/XendDomain.py Thu Sep 07 18:54:45 2006 +0100 @@ -420,6 +420,10 @@ class XendDomain: """ The following call may raise a XendError exception """ dominfo.testMigrateDevices(True, dst) + if live: + """ Make sure there's memory free for enabling shadow mode """ + dominfo.checkLiveMigrateMemory() + if port == 0: port = xroot.get_xend_relocation_port() try: diff -r 1de184deaa9c tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Sep 06 13:16:02 2006 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Sep 07 22:05:10 2006 +0100 @@ -49,6 +49,7 @@ from xen.xend.xenstore.xsutil import Get from xen.xend.xenstore.xsutil import GetDomainPath, IntroduceDomain from xen.xend.xenstore.xswatch import xswatch +from xen.xend import arch """Shutdown code for poweroff.""" DOMAIN_POWEROFF = 0 @@ -1502,6 +1503,19 @@ class XendDomainInfo: self.image.createDeviceModel() ## public: + + def checkLiveMigrateMemory(self): + """ Make sure there's enough memory to migrate this domain """ + overhead_kb = 0 + if arch.type == "x86": + # 1MB per vcpu plus 4Kib/Mib of RAM. This is higher than + # the minimum that Xen would allocate if no value were given. + overhead_kb = self.info['vcpus'] * 1024 + self.info['maxmem'] * 4 + overhead_kb = ((overhead_kb + 1023) / 1024) * 1024 + # The domain might already have some shadow memory + overhead_kb -= xc.shadow_mem_control(self.domid) * 1024 + if overhead_kb > 0: + balloon.free(overhead_kb) def testMigrateDevices(self, network, dst): """ Notify all device about intention of migration