On 07/12/2013 09:53 AM, Daniel P. Berrange wrote:
>> if (qemuCaps->arch == VIR_ARCH_X86_64 ||
>> qemuCaps->arch == VIR_ARCH_I686) {
>> virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
>> virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);
>> - virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
>
> This part seems dubious, like it might break upgrades. If an older
> libvirt says that qemu has a feature, and a VM is running, then when you
> upgrade libvirtd and the feature is no longer provided by qemu, then
> libvirtd may silently drop the domain definition because it can't find a
> qemu binary that supports the same features as were required by the
> older libvirtd. It shouldn't hurt to leave this cap bit set, even if
> the rest of this patch is about avoiding the need to rely on this cap bit.
That shouldn't happen I think. For any runing guest, we have recorded
the original capabilities in the domain status XML file. So any caps
we detect against QEMU binaries upon restart will only impact newly
started guests.
I seem to recall difficulties in the past, such as when developing on a
RHEL machine, where the upstream and the downstream list of cap bits are
different, and where restarting upstream libvirtd had problems with
domains already started by downstream libvirtd. I'd feel better if this
were explicitly tested (easy enough to do - build libvirtd without this
patch, start a domain, rebuild libvirtd with the patch, restart
libvirtd, and see if virsh can still control the domain).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org