On 12/12/2016 09:49 PM, Eduardo Habkost wrote: > Original problem description by Greg Kurz: > >> Since commit "9a4c0e220d8a hw/virtio-pci: fix virtio >> behaviour", passing -device virtio-blk-pci.disable-modern=off >> has no effect on 2.6 machine types because the internal >> virtio-pci.disable-modern=on compat property always prevail. > The same bug also affects other abstract type names mentioned on > compat_props by machine-types: apic-common, i386-cpu, pci-device, > powerpc64-cpu, s390-skeys, spapr-pci-host-bridge, usb-device, > virtio-pci, x86_64-cpu. > > The right fix for this problem is to make sure compat_props and > -global options are always applied in the order they are > registered, instead of reordering them based on the type > hierarchy. But changing the ordering rules of -global is risky > and might break existing configurations, so we shouldn't do that > on a stable branch. > > This is a temporary hack that will work around the bug when > registering compat_props properties: if we find an abstract class > on compat_props, register properties for all its non-abstract > subtypes instead. This will make sure -global won't be overridden > by compat_props, while keeping the existing ordering rules on > -global options. > > Note that there's one case that won't be fixed by this hack: > "-global spapr-pci-vfio-host-bridge.<option>=<value>" won't be > able to override compat_props, because spapr-pci-host-bridge is > not an abstract class. > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > ---
Reviewed-by: Halil Pasic <pa...@linux.vnet.ibm.com>