[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] Fix pci passthru in xend interface used by libvirt
# HG changeset patch # User Jim Fehlig <jfehlig@xxxxxxxxxx> # Date 1288301229 21600 # Branch xend-pci # Node ID 461b9d3a643a2c67c961d9fc468a804891f3770d # Parent 28a16074681582f1209c9077f870ccf44927133e Fix pci passthru in xend interface used by libvirt Attempting to define or create a domain whose XML config contains a passthru PCI device fails with libvirt xen84: # cat win2k8r2.xml ... <hostdev mode='subsystem' type='pci' managed='no'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </source> </hostdev> ... xen84: # virsh create ./win2k8r2.xml error: Failed to create domain from ./win2k8r2.xml error: POST operation failed: xend_post: error from xen daemon: (xend.err "Error creating domain: 'key'") The PCI device config maintained by xend includes a 'key' field, which is initialized by xm client when using that tool and traditional xen config file. libvirt, which uses xend's sexpr-over-http interface (is that the proper name for that interface??), does not initialize this field - and shouldn't be expected to do so IMO. Clients should not be bothered with xend's internal representation of a PCI device. This patch populates the 'key' field within xend if it is uninitialized, similar to current initialization of 'uuid' field. The 'vdevfn' field suffers a similar problem if not (optionally) specified by user. AFAICT, the xm client initializes 'vdevfn' to 0x100 if not specified so I've done the same here. Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx> diff -r 28a160746815 -r 461b9d3a643a tools/python/xen/util/pci.py --- a/tools/python/xen/util/pci.py Wed Oct 27 12:24:28 2010 +0100 +++ b/tools/python/xen/util/pci.py Thu Oct 28 15:27:09 2010 -0600 @@ -240,10 +240,16 @@ pci_dev_info = dict(pci_dev[1:]) if 'opts' in pci_dev_info: pci_dev_info['opts'] = pci_opts_list_from_sxp(pci_dev) - # append uuid to each pci device that does't already have one. + # If necessary, initialize uuid, key, and vdevfn for each pci device if not pci_dev_info.has_key('uuid'): - dpci_uuid = pci_dev_info.get('uuid', uuid.createString()) - pci_dev_info['uuid'] = dpci_uuid + pci_dev_info['uuid'] = uuid.createString() + if not pci_dev_info.has_key('key'): + pci_dev_info['key'] = "%02x:%02x.%x" % \ + (int(pci_dev_info['bus'], 16), + int(pci_dev_info['slot'], 16), + int(pci_dev_info['func'], 16)) + if not pci_dev_info.has_key('vdevfn'): + pci_dev_info['vdevfn'] = "0x%02x" % AUTO_PHP_SLOT pci_devs.append(pci_dev_info) dev_config['devs'] = pci_devs _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |