aboutsummaryrefslogtreecommitdiff
path: root/hw/i386
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2016-06-24 15:36:11 +0200
committerEduardo Habkost <ehabkost@redhat.com>2016-07-20 12:02:20 -0300
commit8fe6374e8e0c8dacb85e9e97897291541dd61be6 (patch)
tree842b86eda7af6d54e76c7f0ba27afbb331270755 /hw/i386
parentc884776e9dc947105827bd6c22192863f97267d2 (diff)
downloadqemu-8fe6374e8e0c8dacb85e9e97897291541dd61be6.zip
qemu-8fe6374e8e0c8dacb85e9e97897291541dd61be6.tar.gz
qemu-8fe6374e8e0c8dacb85e9e97897291541dd61be6.tar.bz2
pc: Make device_del CPU work for x86 CPUs
ACPI subsystem already has all logic in place the only thing left to eject CPU is destroy it and ammend present CPUs counter in CMOS, do so. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Diffstat (limited to 'hw/i386')
-rw-r--r--hw/i386/pc.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 13843da..ac7a4d5 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1847,6 +1847,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
DeviceState *dev, Error **errp)
{
+ CPUArchId *found_cpu;
HotplugHandlerClass *hhc;
Error *local_err = NULL;
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
@@ -1858,13 +1859,11 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
goto out;
}
- /*
- * TODO: enable unplug once generic CPU remove bits land
- * for now guest will be able to eject CPU ACPI wise but
- * it will come back again on machine reset.
- */
- /* object_unparent(OBJECT(dev)); */
+ found_cpu = pc_find_cpu_slot(pcms, CPU(dev), NULL);
+ found_cpu->cpu = NULL;
+ object_unparent(OBJECT(dev));
+ rtc_set_memory(pcms->rtc, 0x5f, rtc_get_memory(pcms->rtc, 0x5f) - 1);
out:
error_propagate(errp, local_err);
}