]> git.proxmox.com Git - mirror_qemu.git/commit - hw/ppc/spapr.c
spapr: make cpu core unplug follow expected hotunplug call flow
authorIgor Mammedov <imammedo@redhat.com>
Thu, 2 Feb 2017 15:02:35 +0000 (16:02 +0100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 22 Feb 2017 00:28:27 +0000 (11:28 +1100)
commit115debf26cdca3154157976b446b209a94665526
tree367cfaf61d105683bd2da43ec8c75d10ae07fa59
parentff9006ddbfd194a946ce3ee46b175919beeaf160
spapr: make cpu core unplug follow expected hotunplug call flow

spapr_core_unplug() were essentially spapr_core_unplug_request()
handler that requested CPU removal and registered callback
which did actual cpu core removali but it was called from
spapr_machine_device_unplug() which is intended for actual object
removal. Commit (cf632463 spapr: Memory hot-unplug support)
sort of fixed it introducing spapr_machine_device_unplug_request()
and calling spapr_core_unplug() but it hasn't renamed callback and
by mistake calls it from spapr_machine_device_unplug().

However spapr_machine_device_unplug() isn't ever called for
cpu core since spapr_core_release() doesn't follow expected
hotunplug call flow which is:
 1: device_del() ->
        hotplug_handler_unplug_request() ->
            set destroy_cb()
 2: destroy_cb() ->
        hotplug_handler_unplug() ->
            object_unparent // actual device removal

Fix it by renaming spapr_core_unplug() to spapr_core_unplug_request()
which is called from spapr_machine_device_unplug_request() and
making spapr_core_release() call hotplug_handler_unplug() which
will call spapr_machine_device_unplug() -> spapr_core_unplug()
to remove cpu core.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reveiwed-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/ppc/spapr.c