0c76f22ef1
- bnc#633573 - System fail to boot after running several warm reboot tests 22749-vtd-workarounds.patch - Upstream patches from Jan 22744-ept-pod-locking.patch 22777-vtd-ats-fixes.patch 22781-pod-hap-logdirty.patch 22782-x86-emul-smsw.patch 22789-i386-no-x2apic.patch 22790-svm-resume-migrate-pirqs.patch 22816-x86-pirq-drop-priv-check.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=94
65 lines
2.7 KiB
Diff
65 lines
2.7 KiB
Diff
# HG changeset patch
|
|
# User Jim Fehlig <jfehlig@novell.com>
|
|
# 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@novell.com>
|
|
|
|
Index: xen-4.0.2-testing/tools/python/xen/util/pci.py
|
|
===================================================================
|
|
--- xen-4.0.2-testing.orig/tools/python/xen/util/pci.py
|
|
+++ xen-4.0.2-testing/tools/python/xen/util/pci.py
|
|
@@ -240,10 +240,16 @@ def pci_convert_sxp_to_dict(dev_sxp):
|
|
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
|
|
|