qemu/hw/i386
Alexander Graf 61de36761b qdev: Keep global allocation counter per bus
When we have 2 separate qdev devices that both create a qbus of the
same type without specifying a bus name or device name, we end up
with two buses of the same name, such as ide.0 on the Mac machines:

  dev: macio-ide, id ""
    bus: ide.0
      type IDE
  dev: macio-ide, id ""
    bus: ide.0
      type IDE

If we now spawn a device that connects to a ide.0 the last created
bus gets the device, with the first created bus inaccessible to the
command line.

After some discussion on IRC we concluded that the best quick fix way
forward for this is to make automated bus-class type based allocation
count a global counter. That's what this patch implements. With this
we instead get

  dev: macio-ide, id ""
    bus: ide.1
      type IDE
  dev: macio-ide, id ""
    bus: ide.0
      type IDE

on the example mentioned above.

This also means that if you did -device ...,bus=ide.0 you got a device
on the first bus (the last created one) before this patch and get that
device on the second one (the first created one) now.  Breaks
migration unless you change bus=ide.0 to bus=ide.1 on the destination.

This is intended and makes the bus enumeration work as expected.

As per review request follows a list of otherwise affected boards and
the reasoning for the conclusion that they are ok:

   target      machine         bus id              times
   ------      -------         ------              -----

   aarch64     n800            i2c-bus.0           2
   aarch64     n810            i2c-bus.0           2
   arm         n800            i2c-bus.0           2
   arm         n810            i2c-bus.0           2

-> Devices are only created explicitly on one of the two buses, using
   s->mpu->i2c[0], so no change to the guest.

   aarch64     vexpress-a15    virtio-mmio-bus.0   4
   aarch64     vexpress-a9     virtio-mmio-bus.0   4
   aarch64     virt            virtio-mmio-bus.0   32
   arm         vexpress-a15    virtio-mmio-bus.0   4
   arm         vexpress-a9     virtio-mmio-bus.0   4
   arm         virt            virtio-mmio-bus.0   32

-> Makes -device bus= work for all virtio-mmio buses.  Breaks
   migration.  Workaround for migration from old to new: specify
   virtio-mmio-bus.4 or .32 respectively rather than .0 on the
   destination.

   aarch64     xilinx-zynq-a9  usb-bus.0           2
   arm         xilinx-zynq-a9  usb-bus.0           2
   mips64el    fulong2e        usb-bus.0           2

-> Normal USB operation not affected. Migration driver needs command
   line to use the other bus.

   i386        isapc           ide.0               2
   x86_64      isapc           ide.0               2
   mips        mips            ide.0               2
   mips64      mips            ide.0               2
   mips64el    mips            ide.0               2
   mipsel      mips            ide.0               2
   ppc         g3beige         ide.0               2
   ppc         mac99           ide.0               2
   ppc         prep            ide.0               2
   ppc64       g3beige         ide.0               2
   ppc64       mac99           ide.0               2
   ppc64       prep            ide.0               2

-> Makes -device bus= work for all IDE buses.  Breaks migration.
   Workaround for migration from old to new: specify ide.1 rather than
   ide.0 on the destination.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Andreas Faerber <afaerber@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
2014-03-05 03:06:47 +01:00
..
kvm pci-assign: Fix potential read beyond buffer on -EBUSY 2014-02-26 10:30:03 -07:00
Makefile.objs pc: ACPI: unify source of CPU hotplug IO base/len 2014-01-26 13:11:44 +02:00
acpi-build.c qdev:pci: refactor PCIDevice to use generic "hotpluggable" property 2014-02-10 10:26:56 +02:00
acpi-build.h i386: ACPI table generation code from seabios 2013-10-14 17:48:57 +03:00
acpi-defs.h i386: ACPI table generation code from seabios 2013-10-14 17:48:57 +03:00
acpi-dsdt-cpu-hotplug.dsl pc: ACPI: unify source of CPU hotplug IO base/len 2014-01-26 13:11:44 +02:00
acpi-dsdt-dbug.dsl i386: add ACPI table files from seabios 2013-10-14 17:48:51 +03:00
acpi-dsdt-hpet.dsl ACPI: Remove commented-out code from HPET._CRS 2014-02-10 11:09:33 +02:00
acpi-dsdt-isa.dsl ACPI: Fix AppleSMC _STA size 2014-01-26 13:06:48 +02:00
acpi-dsdt-pci-crs.dsl pc: Q35 DSDT: exclude CPU hotplug IO range from PCI bus resources 2014-01-26 13:11:44 +02:00
acpi-dsdt.dsl pc: ACPI: unify source of CPU hotplug IO base/len 2014-01-26 13:11:44 +02:00
acpi-dsdt.hex.generated pc: ACPI: update acpi-dsdt.hex.generated q35-acpi-dsdt.hex.generated 2014-01-26 13:11:44 +02:00
bios-linker-loader.c i386: Add missing include file for QEMU_PACKED 2014-02-01 13:43:52 +04:00
bios-linker-loader.h i386: add bios linker/loader 2013-10-14 17:48:52 +03:00
kvmvapic.c QOM CPUState refactorings / X86CPU 2014-01-10 11:04:31 -08:00
multiboot.c multiboot: Calculate upper_mem in the ROM 2013-06-28 14:01:52 -05:00
multiboot.h refer to FWCfgState explicitly 2013-06-02 18:14:02 +03:00
pc.c pc.c: better error message on initrd sizing failure 2014-02-05 16:55:50 +02:00
pc_piix.c qdev: Keep global allocation counter per bus 2014-03-05 03:06:47 +01:00
pc_q35.c q35: document gigabyte_align 2014-01-26 13:11:45 +02:00
pc_sysfw.c hw/i386/pc_sysfw: support two flash drives 2013-12-23 13:12:34 +02:00
q35-acpi-dsdt.dsl pc: ACPI: unify source of CPU hotplug IO base/len 2014-01-26 13:11:44 +02:00
q35-acpi-dsdt.hex.generated pc: ACPI: update acpi-dsdt.hex.generated q35-acpi-dsdt.hex.generated 2014-01-26 13:11:44 +02:00
smbios.c smbios: Set system manufacturer, product & version by default 2013-12-10 13:29:22 +02:00
ssdt-misc.dsl i386: add ACPI table files from seabios 2013-10-14 17:48:51 +03:00
ssdt-misc.hex.generated acpi: pre-compiled ASL files 2013-10-14 17:48:51 +03:00
ssdt-pcihp.dsl acpi-build: enable hotplug for PCI bridges 2014-01-26 13:11:44 +02:00
ssdt-pcihp.hex.generated pc: ACPI: update acpi-dsdt.hex.generated q35-acpi-dsdt.hex.generated 2014-01-26 13:11:44 +02:00
ssdt-proc.dsl ssdt: fix PBLK length 2013-10-14 17:48:57 +03:00
ssdt-proc.hex.generated pc: ACPI: update acpi-dsdt.hex.generated q35-acpi-dsdt.hex.generated 2014-01-26 13:11:44 +02:00
xen_domainbuild.c aio / timers: Switch entire codebase to the new timer API 2013-08-22 19:14:24 +02:00
xen_domainbuild.h hw: move private headers to hw/ subdirectories. 2013-04-08 18:13:16 +02:00
xen_machine_pv.c hw: Clean up bogus default boot order 2013-08-28 10:16:47 +03:00