# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1225707789 0
# Node ID 91a2b9309a723637c31a52caa63dd78ead4f8fd2
# Parent f12d9595d07ceaa1b624a3e91774a3591f2cfc8c
xend: ioport & irq persistence thru reboot
When a domU is configured for a serial port as documented at:
http://wiki.xensource.com/xenwiki/InstallationNotes
the VM does see the serial port, however when dom0 is rebooted and
the VM started it no longer has access to the serial port.
xm list -l <vm> no longer shows the ioports or irq attributes
Attached patch adds implementation of getDeviceConfiguration(),
returns details dict and implements waitForDevice() to irqif.py and
iopif.py.
Also added preprocess_irq() to create.py.
Signed-off-by: Pat Campbell <plc@xxxxxxxxxx>
---
tools/python/xen/xend/server/iopif.py | 20 +++++++++++++++++++-
tools/python/xen/xend/server/irqif.py | 19 ++++++++++++++++++-
tools/python/xen/xm/create.py | 9 +++++++++
3 files changed, 46 insertions(+), 2 deletions(-)
diff -r f12d9595d07c -r 91a2b9309a72 tools/python/xen/xend/server/iopif.py
--- a/tools/python/xen/xend/server/iopif.py Fri Oct 31 14:02:39 2008 +0000
+++ b/tools/python/xen/xend/server/iopif.py Mon Nov 03 10:23:09 2008 +0000
@@ -45,8 +45,21 @@ def parse_ioport(val):
class IOPortsController(DevController):
+ valid_cfg = ['to', 'from', 'uuid']
+
def __init__(self, vm):
DevController.__init__(self, vm)
+
+ def getDeviceConfiguration(self, devid, transaction = None):
+ result = DevController.getDeviceConfiguration(self, devid, transaction)
+ if transaction is None:
+ devinfo = self.readBackend(devid, *self.valid_cfg)
+ else:
+ devinfo = self.readBackendTxn(transaction, devid, *self.valid_cfg)
+ config = dict(zip(self.valid_cfg, devinfo))
+ config = dict([(key, val) for key, val in config.items()
+ if val != None])
+ return config
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
@@ -81,4 +94,9 @@ class IOPortsController(DevController):
'ioports: Failed to configure legacy i/o range: %s - %s' %
(io_from, io_to))
- return (None, {}, {})
+ back = dict([(k, config[k]) for k in self.valid_cfg if k in config])
+ return (self.allocateDeviceID(), back, {})
+
+ def waitForDevice(self, devid):
+ # don't wait for hotplug
+ return
diff -r f12d9595d07c -r 91a2b9309a72 tools/python/xen/xend/server/irqif.py
--- a/tools/python/xen/xend/server/irqif.py Fri Oct 31 14:02:39 2008 +0000
+++ b/tools/python/xen/xend/server/irqif.py Mon Nov 03 10:23:09 2008 +0000
@@ -39,6 +39,18 @@ class IRQController(DevController):
def __init__(self, vm):
DevController.__init__(self, vm)
+ valid_cfg = ['irq', 'uuid']
+
+ def getDeviceConfiguration(self, devid, transaction = None):
+ result = DevController.getDeviceConfiguration(self, devid, transaction)
+ if transaction is None:
+ devinfo = self.readBackend(devid, *self.valid_cfg)
+ else:
+ devinfo = self.readBackendTxn(transaction, devid, *self.valid_cfg)
+ config = dict(zip(self.valid_cfg, devinfo))
+ config = dict([(key, val) for key, val in config.items()
+ if val != None])
+ return config
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
@@ -75,4 +87,9 @@ class IRQController(DevController):
if rc < 0:
raise VmError(
'irq: Failed to map irq %x' % (pirq))
- return (None, {}, {})
+ back = dict([(k, config[k]) for k in self.valid_cfg if k in config])
+ return (self.allocateDeviceID(), back, {})
+
+ def waitForDevice(self, devid):
+ # don't wait for hotplug
+ return
diff -r f12d9595d07c -r 91a2b9309a72 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py Fri Oct 31 14:02:39 2008 +0000
+++ b/tools/python/xen/xm/create.py Mon Nov 03 10:23:09 2008 +0000
@@ -1036,6 +1036,14 @@ def preprocess_ioports(vals):
ioports.append(hexd)
vals.ioports = ioports
+def preprocess_irq(vals):
+ if not vals.irq: return
+ irq = []
+ for v in vals.irq:
+ d = repr(v)
+ irq.append(d)
+ vals.irq = irq
+
def preprocess_vtpm(vals):
if not vals.vtpm: return
vtpms = []
@@ -1134,6 +1142,7 @@ def preprocess(vals):
preprocess_vscsi(vals)
preprocess_ioports(vals)
preprocess_ip(vals)
+ preprocess_irq(vals)
preprocess_nfs(vals)
preprocess_vtpm(vals)
preprocess_access_control(vals)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|