From: Greg Kurz Date: Wed, 23 Oct 2019 19:17:40 +0000 (+0200) Subject: spapr: Don't request to unplug the same core twice X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=47c8c915b1628360d4d7d483e421e49b6bcfc371;p=qemu.git spapr: Don't request to unplug the same core twice We must not call spapr_drc_detach() on a detached DRC otherwise bad things can happen, ie. QEMU hangs or crashes. This is easily demonstrated with a CPU hotplug/unplug loop using QMP. Signed-off-by: Greg Kurz Message-Id: <157185826035.3073024.1664101000438499392.stgit@bahia.lan> Signed-off-by: David Gibson --- diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index f9410d390a..94f9d27096 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3741,9 +3741,10 @@ void spapr_core_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, spapr_vcpu_id(spapr, cc->core_id)); g_assert(drc); - spapr_drc_detach(drc); - - spapr_hotplug_req_remove_by_index(drc); + if (!spapr_drc_unplug_requested(drc)) { + spapr_drc_detach(drc); + spapr_hotplug_req_remove_by_index(drc); + } } int spapr_core_dt_populate(SpaprDrc *drc, SpaprMachineState *spapr,