qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 4/5] spapr: check if cpu core is already present


From: Igor Mammedov
Subject: [Qemu-devel] [PATCH v2 4/5] spapr: check if cpu core is already present
Date: Tue, 8 Mar 2016 14:18:14 +0100

Signed-off-by: Igor Mammedov <address@hidden>
---
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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]