On 10.04.2014 07:26, Li Zhang wrote:
On 2014年04月09日 17:25, Michal Privoznik wrote:
> On 09.04.2014 04:03, Li Zhang wrote:
>> From: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
>>
>> For QEMU2.0 forward version, it supports PCI multiBUS.
>> Currently, libvirt still disables it which causes an error
>> "Bus 'pci' not found".
>>
>> Signed-off-by: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
>> ---
>> src/qemu/qemu_capabilities.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>> index 2c8ec10..b49398f 100644
>> --- a/src/qemu/qemu_capabilities.c
>> +++ b/src/qemu/qemu_capabilities.c
>> @@ -3019,6 +3019,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
>> if (qemuCaps->version >= 1006000)
>> virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
>>
>> + if (qemuCaps->version >= 2000000)
>> + virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
>> +
>> if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0)
>> goto cleanup;
>> if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0)
>>
>
> Libvirt is setting this capability unconditionally for all x86_64 and
> i686 (see virQEMUCapsInitArchQMPBasic). What is the actual scenario
> you're seeing this error in?
For pseries machine, before QEMU2.0, the PCI bus default name is always
"pci".
QEMU2.0 changed the name as "pci.0" to support MULTBUS a couple days ago.
If libvirt still parses the name as "pci" with QEMU_CAPS_PCI_MULTIBUS
disabled,
it will report the error "Bus 'pci' not found".
I may need to add a PPC64 condition if X86 always enables MULTIBUS.
Yeah, I see. But then again, I think we need a different patch after all:
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 381b3ec..a14161d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2940,10 +2940,13 @@ virQEMUCapsInitArchQMPBasic(virQEMUCapsPtr qemuCaps,
}
/*
- * Currently only x86_64 and i686 support PCI-multibus,
- * -no-acpi and -no-kvm-pit-reinjection.
+ * Currently only x86_64, i686 and PPC64 support PCI-multibus.
+ * Moreover, the first two arches support -no-acpi and
+ * -no-kvm-pit-reinjection.
*/
- if (qemuCaps->arch == VIR_ARCH_X86_64 ||
+ if (qemuCaps->arch == VIR_ARCH_PPC64) {
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+ } else if (qemuCaps->arch == VIR_ARCH_X86_64 ||
qemuCaps->arch == VIR_ARCH_I686) {
virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);
Michal