[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v1 09/13] spapr: CPU hot unplug support
From: |
Bharata B Rao |
Subject: |
[Qemu-devel] [RFC PATCH v1 09/13] spapr: CPU hot unplug support |
Date: |
Thu, 8 Jan 2015 11:40:16 +0530 |
Support hot removal of CPU for sPAPR guests.
Signed-off-by: Bharata B Rao <address@hidden>
---
hw/ppc/spapr.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 4347471..ec793b1 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1908,6 +1908,22 @@ static void spapr_cpu_hotplug_add(DeviceState *dev,
CPUState *cs)
drck->attach(drc, dev, fdt, offset, false);
}
+static void spapr_cpu_release(DeviceState *dev, void *opaque)
+{
+ /* Release vCPU */
+}
+
+static void spapr_cpu_hotplug_remove(DeviceState *dev, CPUState *cs)
+{
+ PowerPCCPU *cpu = POWERPC_CPU(cs);
+ int id = ppc_get_vcpu_dt_id(cpu);
+ sPAPRDRConnector *drc =
+ spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, id);
+ sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
+
+ drck->detach(drc, dev, spapr_cpu_release, NULL);
+}
+
static void spapr_cpu_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
Error **errp)
{
@@ -1948,6 +1964,21 @@ static void spapr_cpu_plug(HotplugHandler *hotplug_dev,
DeviceState *dev,
return;
}
+static void spapr_cpu_unplug(HotplugHandler *hotplug_dev, DeviceState *dev,
+ Error **errp)
+{
+ Error *local_err = NULL;
+ CPUState *cs = CPU(dev);
+ PowerPCCPU *cpu = POWERPC_CPU(cs);
+ sPAPRDRConnector *drc =
+ spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, cpu->cpu_dt_id);
+
+ spapr_cpu_hotplug_remove(dev, cs);
+ spapr_hotplug_req_remove_event(drc);
+ error_propagate(errp, local_err);
+ return;
+}
+
static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
DeviceState *dev, Error **errp)
{
@@ -1958,6 +1989,16 @@ static void spapr_machine_device_plug(HotplugHandler
*hotplug_dev,
}
}
+static void spapr_machine_device_unplug(HotplugHandler *hotplug_dev,
+ DeviceState *dev, Error **errp)
+{
+ if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
+ if (dev->hotplugged) {
+ spapr_cpu_unplug(hotplug_dev, dev, errp);
+ }
+ }
+}
+
static HotplugHandler *spapr_get_hotpug_handler(MachineState *machine,
DeviceState *dev)
{
@@ -1986,6 +2027,8 @@ static void spapr_machine_class_init(ObjectClass *oc,
void *data)
mc->get_hotplug_handler = spapr_get_hotpug_handler;
hc->plug = spapr_machine_device_plug;
+ hc->unplug = spapr_machine_device_unplug;
+
smc->dr_phb_enabled = false;
smc->dr_cpu_enabled = false;
smc->dr_lmb_enabled = false;
--
2.1.0
- [Qemu-devel] [RFC PATCH v1 13/13] spapr: Memory hotplug support, (continued)
- [Qemu-devel] [RFC PATCH v1 13/13] spapr: Memory hotplug support, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 07/13] spapr: Start all the threads of CPU core when core is hotplugged, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 05/13] spapr: Support ibm, lrdr-capacity device tree property, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 12/13] spapr: Support ibm, dynamic-reconfiguration-memory, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 09/13] spapr: CPU hot unplug support,
Bharata B Rao <=
- [Qemu-devel] [RFC PATCH v1 02/13] spapr: Add DRC dt entries for CPUs, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 06/13] spapr: CPU hotplug support, Bharata B Rao, 2015/01/08
- Re: [Qemu-devel] [RFC PATCH v1 06/13] spapr: CPU hotplug support, Igor Mammedov, 2015/01/23