diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-04-24 13:19:37 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-04-24 13:19:37 +0100 |
commit | 94e98d9fffa20e107c22098222fcb2df157e267a (patch) | |
tree | 45e31c78d8b341aa6d2f0d67e6f63d32d5062494 | |
parent | 4a696a0a8618ca0f7502bfb98ef847890e6d53d6 (diff) | |
download | xen-94e98d9fffa20e107c22098222fcb2df157e267a.tar.gz xen-94e98d9fffa20e107c22098222fcb2df157e267a.tar.bz2 xen-94e98d9fffa20e107c22098222fcb2df157e267a.zip |
xend: modify the order of resetting/deassigning device.
When guest OS shutdowns or a device is hotremoved.
1. Xend resets devices.
2. Xend deassigns devices.
Because if devices are deassigned before the reset, dom0 memory may be
overwritten by DMA.
Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
-rw-r--r-- | tools/python/xen/xend/server/pciif.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/tools/python/xen/xend/server/pciif.py b/tools/python/xen/xend/server/pciif.py index 1515c9f05d..7820fd0edb 100644 --- a/tools/python/xen/xend/server/pciif.py +++ b/tools/python/xen/xend/server/pciif.py @@ -489,13 +489,16 @@ class PciController(DevController): "bind your slot/device to the PCI backend using sysfs" \ )%(dev.name)) - if not self.vm.info.is_hvm(): - pci_str = "0x%x, 0x%x, 0x%x, 0x%x" % (domain, bus, slot, func) - bdf = xc.deassign_device(fe_domid, pci_str) - if bdf > 0: - raise VmError("Failed to deassign device from IOMMU (%x:%x.%x)" - % (bus, slot, func)) - log.debug("pci: deassign device %x:%x.%x" % (bus, slot, func)) + # Need to do FLR here before deassign device in order to terminate + # DMA transaction, etc + dev.do_FLR() + + pci_str = "0x%x, 0x%x, 0x%x, 0x%x" % (domain, bus, slot, func) + bdf = xc.deassign_device(fe_domid, pci_str) + if bdf > 0: + raise VmError("Failed to deassign device from IOMMU (%x:%x.%x)" + % (bus, slot, func)) + log.debug("pci: Deassign device %x:%x.%x" % (bus, slot, func)) for (start, size) in dev.ioports: log.debug('pci: disabling ioport 0x%x/0x%x'%(start,size)) @@ -528,7 +531,6 @@ class PciController(DevController): if rc<0: raise VmError(('pci: failed to configure irq on device '+ '%s - errno=%d')%(dev.name,rc)) - dev.do_FLR() def cleanupDevice(self, devid): """ Detach I/O resources for device and cleanup xenstore nodes |