Add "special" PV consoles to handle save/restore state files of
stubdom qemu-xen.
Signed-off-by: Igor Pavlikevich <ipavlikevich@gmail.com>
---
 tools/python/xen/xend/XendConfig.py           |    1 +
 tools/python/xen/xend/XendDomainInfo.py       |   11 ++++++++++-
 tools/python/xen/xend/image.py                |    6 ++++--
 tools/python/xen/xend/server/DevController.py |   19 ++++++++++++++-----
 4 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/tools/python/xen/xend/XendConfig.py
b/tools/python/xen/xend/XendConfig.py
index 9c47e56..3ff8719 100644
--- a/tools/python/xen/xend/XendConfig.py
+++ b/tools/python/xen/xend/XendConfig.py
@@ -1889,6 +1889,7 @@ class XendConfig(dict):
                 ''uuid'': dev_uuid,
                 ''protocol'': protocol,
                 ''location'': location,
+                ''output'': '''',
                 ''other_config'': other_config,
             }
 
diff --git a/tools/python/xen/xend/XendDomainInfo.py
b/tools/python/xen/xend/XendDomainInfo.py
index 456e325..6f83342 100644
--- a/tools/python/xen/xend/XendDomainInfo.py
+++ b/tools/python/xen/xend/XendDomainInfo.py
@@ -75,6 +75,8 @@ from xen.xend.XendDSCSI import XendDSCSI, XendDSCSI_HBA
 
 MIGRATE_TIMEOUT = 30.0
 BOOTLOADER_LOOPBACK_DEVICE = ''/dev/xvdp''
+XM_DEVICE_MODEL_SAVE_FILE = ''/var/lib/xen/qemu-save''
+XM_DEVICE_MODEL_RESTORE_FILE = ''/var/lib/xen/qemu-resume''
 
 xc = xen.lowlevel.xc.xc()
 xoptions = XendOptions.instance()
@@ -1627,7 +1629,14 @@ class XendDomainInfo:
             serial_consoles =
self.info.console_get_all(''vt100'')
             if not serial_consoles:
                 cfg = self.info.console_add(''vt100'',
self.console_port)
-                self._createDevice(''console'', cfg)
+		if self.info[''PV_kernel''].find(''stubdom'')
> -1 :
+		    self._createDevice(''console'', cfg)
+		    cfg[''output''] =
''file:''+XM_DEVICE_MODEL_SAVE_FILE+''.''+str(self.domid-1)
+		    self._createDevice(''console'', cfg)
+		    cfg[''output''] =
''pipe:''+XM_DEVICE_MODEL_RESTORE_FILE+''.''+str(self.domid-1)
+		    self._createDevice(''console'', cfg)
+		else:
+		    self._createDevice(''console'', cfg)
             else:
                 console_uuid = serial_consoles[0].get(''uuid'')
                 self.info.console_update(console_uuid,
''location'',
diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py
index 832c168..f845751 100644
--- a/tools/python/xen/xend/image.py
+++ b/tools/python/xen/xend/image.py
@@ -471,7 +471,8 @@ class ImageHandler:
         if self.device_model.find(''stubdom-dm'') > -1 :
             from xen.xend import XendDomain
             domains = XendDomain.instance()
-            domains.domains_lock.release()
+            if not restore:
+                domains.domains_lock.release()
 
             count = 0
             while True:
@@ -488,7 +489,8 @@ class ImageHandler:
                 if count > 100:
                     break
 
-            domains.domains_lock.acquire()
+            if not restore:
+                domains.domains_lock.acquire()
 
     def signalDeviceModel(self, cmd, ret, par = None):
         if self.device_model is None:
diff --git a/tools/python/xen/xend/server/DevController.py
b/tools/python/xen/xend/server/DevController.py
index 0431cc2..e45d375 100644
--- a/tools/python/xen/xend/server/DevController.py
+++ b/tools/python/xen/xend/server/DevController.py
@@ -498,6 +498,7 @@ class DevController:
         xd = xen.xend.XendDomain.instance()
 
         backdom_name = config.get(''backend'')
+        output = config.get(''output'')
         if backdom_name:
             backdom = xd.domain_lookup_nr(backdom_name)
         else:
@@ -510,11 +511,19 @@ class DevController:
         frontpath = self.frontendPath(devid)
         backpath  = self.backendPath(backdom, devid)
         
-        frontDetails.update({
-            ''backend'' : backpath,
-            ''backend-id'' : "%i" %
backdom.getDomid(),
-            ''state'' :
str(xenbusState[''Initialising''])
-            })
+        if output != '''' and output != None:
+            frontDetails.update({
+                ''backend'' : backpath,
+                ''backend-id'' : "%i" %
backdom.getDomid(),
+                ''state'' :
str(xenbusState[''Initialising'']),
+                ''output'' : output
+                })
+        else:
+            frontDetails.update({
+                ''backend'' : backpath,
+                ''backend-id'' : "%i" %
backdom.getDomid(),
+                ''state'' :
str(xenbusState[''Initialising''])
+                })
 
         if self.vm.native_protocol:
             frontDetails.update({''protocol'' :
self.vm.native_protocol})
-- 
1.7.10.4