qemu-irix/hw/core
Eduardo Habkost 04cde530be machine: Convert abstract typename on compat_props to subclass names
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 <ehabkost@redhat.com>
Message-Id: <1481575745-26120-1-git-send-email-ehabkost@redhat.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
Tested-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
(cherry picked from commit 0bcba41fe3)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2017-03-16 12:10:38 -05:00
..
Makefile.objs generic-loader: Add a generic loader 2016-10-04 13:28:09 +01:00
bus.c bus: simplify name handling 2016-09-08 18:05:22 +04:00
empty_slot.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
fw-path-provider.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
generic-loader.c generic-loader: file: Only set a PC if a CPU is specified 2016-11-28 11:25:58 +00:00
hotplug.c qdev: hotplug: drop HotplugHandler.post_plug callback 2016-11-15 17:20:37 +02:00
irq.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
loader.c loader: fix undefined behavior in rom_order_compare() 2016-11-30 04:22:18 +02:00
machine.c machine: Convert abstract typename on compat_props to subclass names 2017-03-16 12:10:38 -05:00
nmi.c nmi: remove x86 specific nmi handling 2016-05-23 16:53:46 +02:00
null-machine.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
or-irq.c irq: Add a new irq device that allows the ORing of lines 2016-10-04 13:28:07 +01:00
platform-bus.c sysbus: Remove ignored return value of FindSysbusDeviceFunc 2016-09-27 17:03:34 -03:00
ptimer.c hw/ptimer: Add "no counter round down" policy 2016-10-24 16:26:52 +01:00
qdev-properties-system.c qdev: fix use-after-free regression from becdfa00cf 2016-11-10 16:01:09 +01:00
qdev-properties.c qdev: Fix assert in PCI address property when used by vfio-pci 2016-11-15 15:50:04 -02:00
qdev.c qdev: hotplug: drop HotplugHandler.post_plug callback 2016-11-15 17:20:37 +02:00
register.c register: Add block initialise helper 2016-07-04 13:15:22 +01:00
stream.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
sysbus.c hw: remove pio_addr_t 2016-05-19 16:42:30 +02:00
uboot_image.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00