
On 04/18/2013 04:38 PM, Laine Stump wrote:
On 04/18/2013 08:09 AM, Ján Tomko wrote:
On 04/18/2013 07:22 AM, Laine Stump wrote:
On 04/17/2013 03:00 PM, Ján Tomko wrote:
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 68518a7..a2179aa 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -10849,9 +10849,15 @@ virDomainDefParseXML(xmlDocPtr xml,
if (def->virtType == VIR_DOMAIN_VIRT_QEMU || def->virtType == VIR_DOMAIN_VIRT_KQEMU || - def->virtType == VIR_DOMAIN_VIRT_KVM) + def->virtType == VIR_DOMAIN_VIRT_KVM) { if (virDomainDefMaybeAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_USB, 0, -1) < 0) goto error; + if (STRPREFIX(def->os.machine,"pc")) {
You also need to do this for all rhel-* machine types. Even though that machine type only shows up in RHEL-specific versions of qemu, it is possible for someone with a stock RHEL qemu to install upstream libvirt, and we don't want to break that. It seems these are not the only machines with a PCI bus (PPC for example has one), which makes me wonder how many things this will break.
Well, we're going to need to figure those out. We can either do it for all, and let people interested in particular machinetypes explicitly exclude theirs, or we can do it only for those machinetypes that we know have a PCI bus, and wait for the others to complain; I guess it all depends on if we want to minimize pain, or minimize the amount of time that passes before we get it right.
I'm not sure if the presence of "PCI" in the output of qemu-system-* -help is an accurate indicator of which platforms have a PCI bus, but I tried running that on all the qemu emulators on my Fedora 18 system and got the following list of qemu binaries that have devices claiming to live on a PCI bus:
for e in qemu-system-*; do if $e -device \? 2>&1| grep -q PCI; then echo "YES - $e"; else echo "NO - $e"; fi; done YES - qemu-system-alpha YES - qemu-system-arm NO - qemu-system-cris YES - qemu-system-i386 NO - qemu-system-lm32 YES - qemu-system-m68k NO - qemu-system-microblaze NO - qemu-system-microblazeel YES - qemu-system-mips YES - qemu-system-mips64 YES - qemu-system-mips64el YES - qemu-system-mipsel NO - qemu-system-or32 YES - qemu-system-ppc YES - qemu-system-ppc64 YES - qemu-system-ppcemb NO - qemu-system-s390x YES - qemu-system-sh4 YES - qemu-system-sh4eb NO - qemu-system-sparc YES - qemu-system-sparc64 NO - qemu-system-unicore32 YES - qemu-system-x86_64 NO - qemu-system-xtensa NO - qemu-system-xtensaeb
So within any binary that supports PCI devices, does that necessarily mean it's supported for *all* machinetypes? If so, we've got a pretty long list of machinetypes to check for:
( for e in qemu-system-*; do if $e -device \? 2>&1| grep -q PCI; then $e -M ? | cut -f1 -d' ' | grep -v Supported | grep -v none; fi; done ) | sort | uniq | wc 72 72 590
(note that it's bad enough we have to eliminate the opacity of machinetype; we *certainly* don't want to start trying to make decisions based on the emulator binary name!)
And of course, just because a machinetype can support pci devices, doesn't necessarily mean that it has a builtin pci-root bus :-O
It seems the way to figure it out is to run: $qemu -M $machine -nodefaults -nodefconfig -monitor stdio <<< "info qtree" | grep "bus:"