spapr_drc: fix aborts during DRC-count based hotplug
commitdf18b2db69fd1696e1f2eb1d8652340b4c57793a
authorMichael Roth <mdroth@linux.vnet.ibm.com>
Mon, 25 Apr 2016 22:24:25 +0000 (25 17:24 -0500)
committerDavid Gibson <david@gibson.dropbear.id.au>
Tue, 26 Apr 2016 01:16:08 +0000 (26 11:16 +1000)
treefb0be2a348367c2f1ed1135647063a8457b47cbb
parentf419a626c76bcb26697883af702862e8623056f9
spapr_drc: fix aborts during DRC-count based hotplug

CPU/memory resources can be signalled en-masse via
spapr_hotplug_req_add_by_count(), and when doing so, actually change
the meaning of the 'drc' parameter passed to
spapr_hotplug_req_event() to be a count rather than an index.

f40eb92 added a hook in spapr_hotplug_req_event() to record when a
device had been 'signalled' to the guest, but that code assumes that
drc is always an index. In cases where it's a count, such as memory
hotplug, the DRC lookup will fail, leading to an assert.

Fix this by only explicitly setting the signalled state for cases where
we are doing PCI hotplug.

For other resources types, since we cannot selectively track whether a
resource has been signalled in cases where we signal attach as a count,
set the 'signalled' state to true immediately upon making the
resource available via drck->attach().

Reported-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: david@gibson.dropbear.id.au
Cc: qemu-ppc@nongnu.org
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/ppc/spapr_drc.c
hw/ppc/spapr_events.c