• E
    machine: Convert abstract typename on compat_props to subclass names · 0bcba41f
    Eduardo Habkost 提交于
    Original problem description by Greg Kurz:
    
    > Since commit "9a4c0e22 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: NEduardo Habkost <ehabkost@redhat.com>
    Message-Id: <1481575745-26120-1-git-send-email-ehabkost@redhat.com>
    Reviewed-by: NCornelia Huck <cornelia.huck@de.ibm.com>
    Reviewed-by: NHalil Pasic <pasic@linux.vnet.ibm.com>
    Reviewed-by: NGreg Kurz <groug@kaod.org>
    Tested-by: NGreg Kurz <groug@kaod.org>
    Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
    0bcba41f
machine.c 18.4 KB