From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya2Yh-0007ct-3A for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:38:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ya2Yd-0002nM-KR for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:38:22 -0400 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:37108) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya2Yc-0002mb-VA for qemu-devel@nongnu.org; Mon, 23 Mar 2015 09:38:19 -0400 Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Mar 2015 23:38:17 +1000 From: Bharata B Rao Date: Mon, 23 Mar 2015 19:06:01 +0530 Message-Id: <1427117764-23008-21-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1427117764-23008-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1427117764-23008-1-git-send-email-bharata@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC PATCH v2 20/23] spapr: Remove vCPU objects after CPU hot unplug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Bharata B Rao , mdroth@linux.vnet.ibm.com, agraf@suse.de, qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com, imammedo@redhat.com, afaerber@suse.de, david@gibson.dropbear.id.au Release the vCPU objects after CPU hot unplug so that vCPU fd can be parked and reused. Signed-off-by: Bharata B Rao --- hw/ppc/spapr.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7b8784d..3e56d9e 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1886,6 +1886,23 @@ static void spapr_cpu_hotplug_add(DeviceState *dev, CPUState *cs, Error **errp) } } +static void spapr_cpu_release(DeviceState *dev, void *opaque) +{ + CPUState *cs; + int i; + int id = ppc_get_vcpu_dt_id(POWERPC_CPU(CPU(dev))); + + for (i = id; i < id + smp_threads; i++) { + CPU_FOREACH(cs) { + PowerPCCPU *cpu = POWERPC_CPU(cs); + + if (i == ppc_get_vcpu_dt_id(cpu)) { + cpu_remove(cs); + } + } + } +} + static void spapr_cpu_hotplug_remove(DeviceState *dev, CPUState *cs, Error **errp) { @@ -1895,7 +1912,7 @@ static void spapr_cpu_hotplug_remove(DeviceState *dev, CPUState *cs, spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, id); sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); - drck->detach(drc, dev, NULL, NULL, errp); + drck->detach(drc, dev, spapr_cpu_release, NULL, errp); } static void spapr_cpu_plug(HotplugHandler *hotplug_dev, DeviceState *dev, -- 2.1.0