WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] More fixes for save/restore; use configured memory for g

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] More fixes for save/restore; use configured memory for generating sxp.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 09 Nov 2005 17:52:09 +0000
Delivery-date: Wed, 09 Nov 2005 17:52:38 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User smh22@xxxxxxxxxxxxxxxxxxxx
# Node ID 5066d2aa2fb0e26abb8b2123d3bfca3cefbfd727
# Parent  1e6147db55cf52acb866e803c3455bdde3bdfa0c
More fixes for save/restore; use configured memory for generating sxp.

Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx>

diff -r 1e6147db55cf -r 5066d2aa2fb0 tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Wed Nov  9 11:39:38 2005
+++ b/tools/libxc/xc_linux_restore.c    Wed Nov  9 12:59:53 2005
@@ -516,8 +516,8 @@
                 /* shouldn't happen - continue optimistically */
                 continue; 
 
-            pfntab[i] = p2m[pfn];
-            p2m[pfn]  = 0x80000001;  // not in pmap
+            pfntab[i] = p2m[pfn];   
+            p2m[pfn]  = INVALID_P2M_ENTRY; // not in pseudo-physical map 
         }
         
         if (count > 0) {
diff -r 1e6147db55cf -r 5066d2aa2fb0 tools/libxc/xg_save_restore.h
--- a/tools/libxc/xg_save_restore.h     Wed Nov  9 11:39:38 2005
+++ b/tools/libxc/xg_save_restore.h     Wed Nov  9 12:59:53 2005
@@ -118,6 +118,7 @@
 /* Returns TRUE if the PFN is currently mapped */
 #define is_mapped(pfn_type) (!((pfn_type) & 0x80000000UL))
 
+#define INVALID_P2M_ENTRY   (~0UL) 
 
 
 
diff -r 1e6147db55cf -r 5066d2aa2fb0 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Nov  9 11:39:38 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Wed Nov  9 12:59:53 2005
@@ -113,6 +113,8 @@
         ('vcpus',        int),
         ('vcpu_avail',   int),
         ('cpu_weight',   float),
+        ('memory',       int),
+        ('maxmem',       int),
         ('bootloader',   str),
         ('on_poweroff',  str),
         ('on_reboot',    str),
@@ -256,10 +258,6 @@
     for e in ROUNDTRIPPING_CONFIG_ENTRIES:
         result[e[0]] = get_cfg(e[0], e[1])
 
-    result['memory']    = get_cfg('memory',    int)
-    result['mem_kb']    = get_cfg('mem_kb',    int)
-    result['maxmem']    = get_cfg('maxmem',    int)
-    result['maxmem_kb'] = get_cfg('maxmem_kb', int)
     result['cpu']       = get_cfg('cpu',       int)
     result['image']     = get_cfg('image')
 
@@ -394,6 +392,7 @@
                   ("on_reboot",    str),
                   ("on_crash",     str),
                   ("image",        str),
+                  ("memory",       int),
                   ("vcpus",        int),
                   ("vcpu_avail",   int),
                   ("start_time", float))
@@ -432,6 +431,9 @@
             self.info['vcpus'] = int(self.info['vcpus'])
 
             defaultInfo('vcpu_avail',   lambda: (1 << self.info['vcpus']) - 1)
+
+            defaultInfo('memory',       lambda: 0)
+            defaultInfo('maxmem',       lambda: 0)
             defaultInfo('bootloader',   lambda: None)
             defaultInfo('backend',      lambda: [])
             defaultInfo('device',       lambda: [])
@@ -442,66 +444,12 @@
             if isinstance(self.info['image'], str):
                 self.info['image'] = sxp.from_string(self.info['image'])
 
-            # Internally, we keep only maxmem_KiB, and not maxmem or maxmem_kb
-            # (which come from outside, and are in MiB and KiB respectively).
-            # This means that any maxmem or maxmem_kb settings here have come
-            # from outside, and maxmem_KiB must be updated to reflect them.
-            # If we have both maxmem and maxmem_kb and these are not
-            # consistent, then this is an error, as we've no way to tell which
-            # one takes precedence.
-
-            # Exactly the same thing applies to memory_KiB, memory, and
-            # mem_kb.
-
-            def discard_negatives(name):
-                if self.infoIsSet(name) and self.info[name] < 0:
-                    del self.info[name]
-
-            def valid_KiB_(mb_name, kb_name):
-                discard_negatives(kb_name)
-                discard_negatives(mb_name)
-                
-                if self.infoIsSet(kb_name):
-                    if self.infoIsSet(mb_name):
-                        mb = self.info[mb_name]
-                        kb = self.info[kb_name]
-                        if mb * 1024 == kb:
-                            return kb
-                        else:
-                            raise VmError(
-                                'Inconsistent %s / %s settings: %s / %s' %
-                                (mb_name, kb_name, mb, kb))
-                    else:
-                        return self.info[kb_name]
-                elif self.infoIsSet(mb_name):
-                    return self.info[mb_name] * 1024
-                else:
-                    return None
-
-            def valid_KiB(mb_name, kb_name):
-                result = valid_KiB_(mb_name, kb_name)
-                if result is None or result < 0:
-                    raise VmError('Invalid %s / %s: %s' %
-                                  (mb_name, kb_name, result))
-                else:
-                    return result
-
-            def delIf(name):
-                if name in self.info:
-                    del self.info[name]
-
-            self.info['memory_KiB'] = valid_KiB('memory', 'mem_kb')
-            delIf('memory')
-            delIf('mem_kb')
-            self.info['maxmem_KiB'] = valid_KiB_('maxmem', 'maxmem_kb')
-            delIf('maxmem')
-            delIf('maxmem_kb')
-
-            if not self.info['maxmem_KiB']:
-                self.info['maxmem_KiB'] = 1 << 30
-
-            if self.info['maxmem_KiB'] > self.info['memory_KiB']:
-                self.info['maxmem_KiB'] = self.info['memory_KiB']
+            if self.info['memory'] == 0:
+                if self.infoIsSet('mem_kb'):
+                    self.info['memory'] = (self.info['mem_kb'] + 1023) / 1024
+
+            if self.info['maxmem'] < self.info['memory']:
+                self.info['maxmem'] = self.info['memory']
 
             for (n, c) in self.info['device']:
                 if not n or not c or n not in controllerClasses:
@@ -576,17 +524,14 @@
 
     def storeVmDetails(self):
         to_store = {
-            'uuid':               self.info['uuid'],
-
-            # XXX
-            'memory/target':      str(self.info['memory_KiB'])
+            'uuid':               self.info['uuid']
             }
 
         if self.infoIsSet('image'):
             to_store['image'] = sxp.to_string(self.info['image'])
 
-        for k in ['name', 'ssidref', 'on_poweroff', 'on_reboot', 'on_crash',
-                  'vcpus', 'vcpu_avail']:
+        for k in ['name', 'ssidref', 'memory', 'maxmem', 'on_poweroff',
+                  'on_reboot', 'on_crash', 'vcpus', 'vcpu_avail']:
             if self.infoIsSet(k):
                 to_store[k] = str(self.info[k])
 
@@ -601,7 +546,7 @@
             'vm':                 self.vmpath,
             'name':               self.info['name'],
             'console/limit':      str(xroot.get_console_limit() * 1024),
-            'memory/target':      str(self.info['memory_KiB'])
+            'memory/target':      str(self.info['memory'] * 1024)
             }
 
         def f(n, v):
@@ -682,8 +627,8 @@
         return self.info['ssidref']
 
     def getMemoryTarget(self):
-        """Get this domain's target memory size, in KiB."""
-        return self.info['memory_KiB']
+        """Get this domain's target memory size, in KB."""
+        return self.info['memory'] * 1024
 
 
     def refreshShutdown(self, xeninfo = None):
@@ -831,10 +776,9 @@
         """Set the memory target of this domain.
         @param target In MiB.
         """
-        # Internally we use KiB, but the command interface uses MiB.
-        t = target << 10
-        self.info['memory_KiB'] = t
-        self.storeDom("memory/target", t)
+        self.info['memory'] = target
+        self.storeVm("memory", target)
+        self.storeDom("memory/target", target << 10)
 
 
     def update(self, info = None):
@@ -883,7 +827,7 @@
         s = "<domain"
         s += " id=" + str(self.domid)
         s += " name=" + self.info['name']
-        s += " memory=" + str(self.info['memory_KiB'] / 1024)
+        s += " memory=" + str(self.info['memory'])
         s += " ssidref=" + str(self.info['ssidref'])
         s += ">"
         return s
@@ -937,15 +881,12 @@
 
     def sxpr(self):
         sxpr = ['domain',
-                ['domid',   self.domid],
-                ['memory',  self.info['memory_KiB'] / 1024]]
+                ['domid',   self.domid]]
 
         for e in ROUNDTRIPPING_CONFIG_ENTRIES:
             if self.infoIsSet(e[0]):
                 sxpr.append([e[0], self.info[e[0]]])
         
-        sxpr.append(['maxmem', self.info['maxmem_KiB'] / 1024])
-
         if self.infoIsSet('image'):
             sxpr.append(['image', self.info['image']])
 
@@ -1086,9 +1027,8 @@
 
 
     def initDomain(self):
-        log.debug('XendDomainInfo.initDomain: %s %s %s',
+        log.debug('XendDomainInfo.initDomain: %s %s',
                   self.domid,
-                  self.info['memory_KiB'],
                   self.info['cpu_weight'])
 
         if not self.infoIsSet('image'):
@@ -1103,7 +1043,7 @@
 
         xc.domain_setcpuweight(self.domid, self.info['cpu_weight'])
 
-        m = self.image.getDomainMemory(self.info['memory_KiB'])
+        m = self.image.getDomainMemory(self.info['memory'] * 1024)
         xc.domain_setmaxmem(self.domid, maxmem_kb = m)
         xc.domain_memory_increase_reservation(self.domid, m, 0, 0)
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] More fixes for save/restore; use configured memory for generating sxp., Xen patchbot -unstable <=