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