xemu/hw
David Gibson 94649d423e spapr: Don't use QOM [*] syntax for DR connectors.
The dynamic reconfiguration (hotplug) code for the pseries machine type
uses a "DR connector" QOM object for each resource it will be possible
to hotplug.  Each of these is added to its owner using
    object_property_add_child(owner, "dr-connector[*], ...);

That works ok, mostly, but it means that the property indices are
arbitrary, depending on the order in which the connectors are constructed.
That might line up to something useful, but it doesn't have to.

It will get worse once we add hotplug RAM support.  That will add a DR
connector object for every 256MB of potential memory.  So if maxmem=2T,
for example, there are 8192 objects under the same parent.

The QOM interfaces aren't really designed for this.  In particular
object_property_add() with [*] has O(n^2) time complexity (in the number of
existing children): first it has a linear search through array indices to
find a free slot, each of which is attempted to a recursive call to
object_property_add() with a specific [N].  Those calls are O(n) because
there's a linear search through all properties to check for duplicates.

By using a meaningful index value, which we already know is unique we can
avoid the [*] special behaviour.  That lets us reduce the total time for
creating the DR objects from O(n^3) to O(n^2).

O(n^2) is still kind of crappy, but it's enough to reduce the startup time
of qemu (with in-progress memory hotplug support) with maxmem=2T from ~20
minutes to ~4 seconds.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
Tested-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-09-23 10:51:10 +10:00
..
9pfs virtio: get_features() can fail 2015-07-27 18:11:53 +03:00
acpi hw/acpi/ich9: clean up stale comment about KVM not supporting SMM 2015-07-27 22:44:47 +03:00
alpha Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
arm Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
audio typofixes - v4 2015-09-11 10:45:43 +03:00
block Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
bt maint: avoid useless "if (foo) free(foo)" pattern 2015-09-11 10:21:38 +03:00
char maint: avoid useless "if (foo) free(foo)" pattern 2015-09-11 10:21:38 +03:00
core Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
cpu hw/cpu/{a15mpcore, a9mpcore}: Handle missing has_el3 CPU props gracefully 2015-09-14 14:39:49 +01:00
cris Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
display Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
dma * Support for jemalloc 2015-09-14 16:13:16 +01:00
gpio i.MX: Add GPIO device 2015-09-14 14:39:49 +01:00
i2c i.MX: Add I2C controller emulator 2015-09-07 10:39:30 +01:00
i386 Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
ide ahci: clean up initial d2h semantics 2015-09-18 10:58:56 -04:00
input Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
intc typofixes - v4 2015-09-11 10:45:43 +03:00
ipack pci: Trivial device model conversions to realize 2015-02-26 12:42:16 +01:00
isa i8257: remove cpu_request_exit irq 2015-09-09 15:34:53 +02:00
lm32 Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
m68k Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
mem numa,pc-dimm: Store pc-dimm memory information in numa_info 2015-07-03 17:47:58 -03:00
microblaze Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
mips Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
misc mac_dbdma: always clear FLUSH bit once DBDMA channel flush is complete 2015-09-20 22:48:38 +02:00
moxie Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
net Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
nvram maint: avoid useless "if (foo) free(foo)" pattern 2015-09-11 10:21:38 +03:00
openrisc Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
pci Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
pci-bridge hw/pci-bridge: format special OFW unit address for PXB host 2015-06-23 22:58:36 +02:00
pci-host PPC: e500 pci host: Fix ATMUs register reads 2015-09-20 22:48:39 +02:00
pcmcia hmp: Remove "info pcmcia" 2014-10-24 12:19:11 +01:00
ppc spapr: Don't use QOM [*] syntax for DR connectors. 2015-09-23 10:51:10 +10:00
s390x machine: Set MachineClass::name automatically 2015-09-19 16:39:28 +02:00
scsi * Support for jemalloc 2015-09-14 16:13:16 +01:00
sd typofixes - v4 2015-09-11 10:45:43 +03:00
sh4 Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
smbios smbios: add smbios 3.0 support 2015-09-07 10:39:28 +01:00
sparc Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
sparc64 Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
ssi arm: Use g_new() & friends where that makes obvious sense 2015-09-07 10:39:27 +01:00
timer i.MX: KZM: use standalone i.MX31 SOC support 2015-09-07 10:39:30 +01:00
tpm maint: remove unused include for dirent.h 2015-09-11 10:21:38 +03:00
tricore Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
unicore32 Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
usb maint: avoid useless "if (foo) free(foo)" pattern 2015-09-11 10:21:38 +03:00
vfio typofixes - v4 2015-09-11 10:45:43 +03:00
virtio hw/virtio/virtio-pci: Remove meaningless blank Property 2015-09-11 11:03:42 +03:00
watchdog i6300esb: fix timer overflow 2015-09-11 10:21:38 +03:00
xen typofixes - v4 2015-09-11 10:45:43 +03:00
xenpv Use DEFINE_MACHINE() to register all machines 2015-09-19 16:40:15 +02:00
xtensa Revert use of DEFINE_MACHINE() for registrations of multiple machines 2015-09-19 16:40:27 +02:00
Makefile.objs smbios: move smbios code into a common folder 2015-08-13 14:08:30 +03:00