[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [RFC PATCH v4 02/11] exec: Do vmstate unregistration from cpu
From: |
Bharata B Rao |
Subject: |
[Qemu-ppc] [RFC PATCH v4 02/11] exec: Do vmstate unregistration from cpu_exec_exit() |
Date: |
Thu, 6 Aug 2015 10:57:08 +0530 |
cpu_exec_init() does vmstate_register and register_savevm for the CPU device.
These need to be undone from cpu_exec_exit(). These changes are needed to
support CPU hot removal and also to correctly fail hotplug attempts
beyond max_cpus.
Signed-off-by: Bharata B Rao <address@hidden>
---
exec.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/exec.c b/exec.c
index b196d68..3415cd7 100644
--- a/exec.c
+++ b/exec.c
@@ -545,6 +545,8 @@ static int cpu_get_free_index(Error **errp)
void cpu_exec_exit(CPUState *cpu)
{
+ CPUClass *cc = CPU_GET_CLASS(cpu);
+
if (cpu->cpu_index == -1) {
/* cpu_index was never allocated by this @cpu or was already freed. */
return;
@@ -556,6 +558,15 @@ void cpu_exec_exit(CPUState *cpu)
}
bitmap_clear(cpu_index_map, cpu->cpu_index, 1);
cpu->cpu_index = -1;
+ if (cc->vmsd != NULL) {
+ vmstate_unregister(NULL, cc->vmsd, cpu);
+ }
+#if defined(CPU_SAVE_VERSION)
+ unregister_savevm(NULL, "cpu", cpu->env_ptr);
+#endif
+ if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
+ vmstate_unregister(NULL, &vmstate_cpu_common, cpu);
+ }
}
#else
@@ -572,12 +583,20 @@ static int cpu_get_free_index(Error **errp)
void cpu_exec_exit(CPUState *cpu)
{
+ CPUClass *cc = CPU_GET_CLASS(cpu);
+
cpu_list_lock();
if (cpu->queued) {
QTAILQ_REMOVE(&cpus, cpu, node);
cpu->queued = false;
}
cpu_list_unlock();
+ if (cc->vmsd != NULL) {
+ vmstate_unregister(NULL, cc->vmsd, cpu);
+ }
+ if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
+ vmstate_unregister(NULL, &vmstate_cpu_common, cpu);
+ }
}
#endif
--
2.1.0
- [Qemu-ppc] [RFC PATCH v4 00/11] sPAPR CPU hotplug, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 11/11] target-ppc: Enable CPU hotplug for POWER8 CPU family, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 02/11] exec: Do vmstate unregistration from cpu_exec_exit(),
Bharata B Rao <=
- [Qemu-ppc] [RFC PATCH v4 06/11] spapr: Create pseries-2.5 machine, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 05/11] xics_kvm: Add cpu_destroy method to XICS, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 07/11] spapr: Enable CPU hotplug for pseries-2.5 and add CPU DRC DT entries, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 01/11] exec: Remove cpu from cpus list during cpu_exec_exit(), Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 03/11] cpus: Reclaim vCPU objects, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 04/11] cpus: Add a sync version of cpu_remove(), Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 10/11] spapr: CPU hot unplug support, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 09/11] spapr: Support topologies with unfilled cores, Bharata B Rao, 2015/08/06
- [Qemu-ppc] [RFC PATCH v4 08/11] spapr: CPU hotplug support, Bharata B Rao, 2015/08/06