From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46943) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1adHXA-0000Kq-Fn for qemu-devel@nongnu.org; Tue, 08 Mar 2016 08:18:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1adHX6-0004CE-Ee for qemu-devel@nongnu.org; Tue, 08 Mar 2016 08:18:44 -0500 From: Igor Mammedov Date: Tue, 8 Mar 2016 14:18:14 +0100 Message-Id: <1457443095-213125-5-git-send-email-imammedo@redhat.com> In-Reply-To: <1457443095-213125-1-git-send-email-imammedo@redhat.com> References: <1457443095-213125-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH v2 4/5] spapr: check if cpu core is already present List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mjrosato@linux.vnet.ibm.com, thuth@redhat.com, pkrempa@redhat.com, ehabkost@redhat.com, aik@ozlabs.ru, armbru@redhat.com, agraf@suse.de, borntraeger@de.ibm.com, qemu-ppc@nongnu.org, bharata@linux.vnet.ibm.com, pbonzini@redhat.com, mdroth@linux.vnet.ibm.com, afaerber@suse.de, david@gibson.dropbear.id.au Signed-off-by: Igor Mammedov --- replaced link set check removed in previous patch --- hw/ppc/spapr.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 6890a44..db33c29 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2297,6 +2297,27 @@ void *spapr_populate_hotplug_cpu_dt(DeviceState *dev, CPUState *cs, return fdt; } +static void spapr_machine_device_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(hotplug_dev); + sPAPRMachineState *spapr = SPAPR_MACHINE(hotplug_dev); + + if (object_dynamic_cast(OBJECT(dev), TYPE_SPAPR_CPU_CORE)) { + int core = object_property_get_int(OBJECT(dev), CPU_CORE_ID_PROP, + &error_abort); + + if (!smc->dr_cpu_enabled && dev->hotplugged) { + error_setg(errp, "CPU hotplug not supported for this machine"); + return; + } + if (spapr->cores[core]) { + error_setg(errp, "core %d is already present", core); + return; + } + } +} + static void spapr_machine_device_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -2338,10 +2359,6 @@ static void spapr_machine_device_plug(HotplugHandler *hotplug_dev, spapr_memory_plug(hotplug_dev, dev, node, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_SPAPR_CPU_CORE)) { - if (!smc->dr_cpu_enabled && dev->hotplugged) { - error_setg(errp, "CPU hotplug not supported for this machine"); - return; - } spapr_core_plug(hotplug_dev, dev, errp); } } @@ -2413,6 +2430,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) mc->has_dynamic_sysbus = true; mc->pci_allow_0_address = true; mc->get_hotplug_handler = spapr_get_hotpug_handler; + hc->pre_plug = spapr_machine_device_pre_plug; hc->plug = spapr_machine_device_plug; hc->unplug = spapr_machine_device_unplug; mc->cpu_index_to_socket_id = spapr_cpu_index_to_socket_id; -- 1.8.3.1