[libvirt] [PATCH 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward.

Michal Privoznik mprivozn at redhat.com
Thu Apr 10 05:50:07 UTC 2014


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 at 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 at 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




More information about the libvir-list mailing list