From mboxrd@z Thu Jan 1 00:00:00 1970 From: plc Subject: [PATCH] xend ioport irq persistence thru reboot Date: Fri, 31 Oct 2008 12:16:27 -0600 Message-ID: <490B4B7B.9020200@novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090602000703060200040401" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------090602000703060200040401 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit When a domU is configured for a serail 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 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 --------------090602000703060200040401 Content-Type: text/x-patch; name="xend-ioport-irq.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xend-ioport-irq.patch" diff -r 1a1271d83edf tools/python/xen/xend/server/iopif.py --- a/tools/python/xen/xend/server/iopif.py Tue Sep 30 13:55:27 2008 -0600 +++ b/tools/python/xen/xend/server/iopif.py Thu Oct 30 14:29:12 2008 -0600 @@ -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 1a1271d83edf tools/python/xen/xend/server/irqif.py --- a/tools/python/xen/xend/server/irqif.py Tue Sep 30 13:55:27 2008 -0600 +++ b/tools/python/xen/xend/server/irqif.py Fri Oct 31 12:13:01 2008 -0600 @@ -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 1a1271d83edf tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Tue Sep 30 13:55:27 2008 -0600 +++ b/tools/python/xen/xm/create.py Thu Oct 30 14:29:12 2008 -0600 @@ -1025,6 +1025,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 = [] @@ -1123,6 +1131,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) --------------090602000703060200040401 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------090602000703060200040401--