[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xend: ioport & irq persistence thru reboot



# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.