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:
Keir Fraser committed 2008-11-03 10:23:09 +00:00
1 parent 3ac61e94cf
commit 9cec91aba5
3 files changed
+46 -2

No files matched your search

+19 -1
View File
@@ -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
+18 -1
View File
@@ -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
+9
View File
@@ -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)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.