mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
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@novell.com>
This commit is contained in:
1 parent
3ac61e94cf
commit
9cec91aba5
3 files changed
+46
-2
No files matched your search
@@ -45,9 +45,22 @@ 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
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||