# HG changeset patch
# User Jimi Xenidis <[EMAIL PROTECTED]>
# Node ID 00c47d5766100994d1b936873629256874a8d5ba
# Parent  ff2c736fce49fedc8057d61f13df0a79ead22871
# Parent  b2f2c477895af973e727612a3967c68639a2b321
[merge] null
---
 tools/python/xen/xend/FlatDeviceTree.py |    2 -
 tools/python/xen/xend/XendDomainInfo.py |   45 ++++++++++++--------------------
 tools/python/xen/xend/arch.py           |   14 ++++-----
 tools/python/xen/xend/image.py          |   41 +++++++----------------------
 4 files changed, 35 insertions(+), 67 deletions(-)

diff -r ff2c736fce49 -r 00c47d576610 tools/python/xen/xend/FlatDeviceTree.py
--- a/tools/python/xen/xend/FlatDeviceTree.py   Wed Aug 23 05:44:46 2006 -0400
+++ b/tools/python/xen/xend/FlatDeviceTree.py   Wed Aug 23 05:49:29 2006 -0400
@@ -293,7 +293,7 @@ def build(imghandler):
     # identical...
     cpu0 = None
     def _nolinuxprops(fullpath):
-        return not os.path.basename(fullpath).startswith('linux,'):
+        return not os.path.basename(fullpath).startswith('linux,')
     for i in range(imghandler.vm.getVCpuCount()):
         cpu = cpus.addnode('PowerPC,[EMAIL PROTECTED]')
         _copytree(cpu, 'cpus/PowerPC,[EMAIL PROTECTED]', _nolinuxprops)
diff -r ff2c736fce49 -r 00c47d576610 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Aug 23 05:44:46 2006 -0400
+++ b/tools/python/xen/xend/XendDomainInfo.py   Wed Aug 23 05:49:29 2006 -0400
@@ -30,7 +30,6 @@ import time
 import time
 import threading
 import os
-import math
 
 import xen.lowlevel.xc
 from xen.util import asserts
@@ -1280,37 +1279,27 @@ class XendDomainInfo:
                 for v in range(0, self.info['max_vcpu_id']+1):
                     xc.vcpu_setaffinity(self.domid, v, self.info['cpus'])
 
-            # set domain maxmem in KiB
-            xc.domain_setmaxmem(self.domid, self.info['maxmem'] * 1024)
-
-            m = self.image.getDomainMemory(self.info['memory'] * 1024)
+            # set memory limit
+            maxmem = self.image.getRequiredMemory(self.info['maxmem'] * 1024)
+            xc.domain_setmaxmem(self.domid, maxmem)
+
+            mem_kb = self.image.getRequiredMemory(self.info['memory'] * 1024)
 
             # get the domain's shadow memory requirement
-            sm = int(math.ceil(self.image.getDomainShadowMemory(m) / 1024.0))
-            if self.info['shadow_memory'] > sm:
-                sm = self.info['shadow_memory']
+            shadow_kb = self.image.getRequiredShadowMemory(mem_kb)
+            shadow_kb_req = self.info['shadow_memory'] * 1024
+            if shadow_kb_req > shadow_kb:
+                shadow_kb = shadow_kb_req
 
             # Make sure there's enough RAM available for the domain
-            balloon.free(m + sm * 1024)
-
-            if os.uname()[4] in ('ppc64'):
-                self.info['shadow_memory'] = 0
-            else:
-                # Set up the shadow memory
-                sm = xc.shadow_mem_control(self.domid, mb=sm)
-                self.info['shadow_memory'] = sm
-
-            init_reservation = self.info['memory'] * 1024
-            if os.uname()[4] in ('ia64', 'ppc64'):
-                # Workaround for architectures that don't yet support
-                # ballooning.
-                init_reservation = m
-                # Following line from [EMAIL PROTECTED]
-                # Needed for IA64 until supports ballooning -- okay for PPC64?
-                xc.domain_setmaxmem(self.domid, m)
-
-            xc.domain_memory_increase_reservation(self.domid, init_reservation,
-                                                  0, 0)
+            balloon.free(mem_kb + shadow_kb)
+
+            # Set up the shadow memory
+            shadow_cur = xc.shadow_mem_control(self.domid, shadow_kb * 1024)
+            self.info['shadow_memory'] = shadow_cur
+
+            # initial memory allocation
+            xc.domain_memory_increase_reservation(self.domid, mem_kb, 0, 0)
 
             self.createChannels()
 
diff -r ff2c736fce49 -r 00c47d576610 tools/python/xen/xend/arch.py
--- a/tools/python/xen/xend/arch.py     Wed Aug 23 05:44:46 2006 -0400
+++ b/tools/python/xen/xend/arch.py     Wed Aug 23 05:49:29 2006 -0400
@@ -20,12 +20,12 @@ import os
 import os
 
 _types = {
-       "i386": "x86",
-       "i486": "x86",
-       "i586": "x86",
-       "i686": "x86",
-       "ia64": "ia64",
-       "ppc": "powerpc",
-       "ppc64": "powerpc",
+    "i386": "x86",
+    "i486": "x86",
+    "i586": "x86",
+    "i686": "x86",
+    "ia64": "ia64",
+    "ppc": "powerpc",
+    "ppc64": "powerpc",
 }
 type = _types.get(os.uname()[4], "unknown")
diff -r ff2c736fce49 -r 00c47d576610 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Wed Aug 23 05:44:46 2006 -0400
+++ b/tools/python/xen/xend/image.py    Wed Aug 23 05:49:29 2006 -0400
@@ -146,7 +146,7 @@ class ImageHandler:
     def getRequiredMemory(self, mem_kb):
         return mem_kb
 
-    def getDomainShadowMemory(self, mem_kb):
+    def getRequiredShadowMemory(self, mem_kb):
         """@return The minimum shadow memory required, in KiB, for a domain 
         with mem_kb KiB of RAM."""
         # PV domains don't need any shadow memory
@@ -197,10 +197,6 @@ class PPC_LinuxImageHandler(LinuxImageHa
     def configure(self, imageConfig, deviceConfig):
         LinuxImageHandler.configure(self, imageConfig, deviceConfig)
         self.imageConfig = imageConfig
-
-    def getDomainMemory(self, mem_kb):
-        """@see ImageHandler.getDomainMemory"""
-        return mem_kb
 
     def buildDomain(self):
         store_evtchn = self.vm.getStorePort()
@@ -382,32 +378,6 @@ class HVMImageHandler(ImageHandler):
         os.waitpid(self.pid, 0)
         self.pid = 0
 
-    def getDomainMemory(self, mem_kb):
-        """@see ImageHandler.getDomainMemory"""
-        if os.uname()[4] == 'ia64':
-            page_kb = 16
-            # ROM size for guest firmware, ioreq page and xenstore page
-            extra_pages = 1024 + 2
-        else:
-            page_kb = 4
-            # This was derived emperically:
-            #   2.4 MB overhead per 1024 MB RAM + 8 MB constant
-            #   + 4 to avoid low-memory condition
-            extra_mb = (2.4/1024) * (mem_kb/1024.0) + 12;
-            extra_pages = int( math.ceil( extra_mb*1024 / page_kb ))
-        return mem_kb + extra_pages * page_kb
-
-    def getDomainShadowMemory(self, mem_kb):
-        """@return The minimum shadow memory required, in KiB, for a domain 
-        with mem_kb KiB of RAM."""
-        if os.uname()[4] in ('ia64', 'ppc64'):
-            # Explicit shadow memory is not a concept 
-            return 0
-        else:
-            # 1MB per vcpu plus 4Kib/Mib of RAM.  This is higher than 
-            # the minimum that Xen would allocate if no value were given.
-            return 1024 * self.vm.getVCpuCount() + mem_kb / 256
-
     def register_shutdown_watch(self):
         """ add xen store watch on control/shutdown """
         self.shutdownWatch = xswatch(self.vm.dompath + "/control/shutdown", \
@@ -453,6 +423,10 @@ class IA64_HVM_ImageHandler(HVMImageHand
         # ROM size for guest firmware, ioreq page and xenstore page
         extra_pages = 1024 + 2
         return mem_kb + extra_pages * page_kb
+
+    def getRequiredShadowMemory(self, mem_kb):
+        # Explicit shadow memory is not a concept 
+        return 0
 
 class X86_HVM_ImageHandler(HVMImageHandler):
 
@@ -466,6 +440,11 @@ class X86_HVM_ImageHandler(HVMImageHandl
         extra_mb = (2.4/1024) * (mem_kb/1024.0) + 12;
         extra_pages = int( math.ceil( extra_mb*1024 / page_kb ))
         return mem_kb + extra_pages * page_kb
+
+    def getRequiredShadowMemory(self, mem_kb):
+        # 1MB per vcpu plus 4Kib/Mib of RAM.  This is higher than 
+        # the minimum that Xen would allocate if no value were given.
+        return 1024 * self.vm.getVCpuCount() + mem_kb / 256
 
 _handlers = {
     "powerpc": {

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to