[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [RFC PATCH v4 01/11] exec: Remove cpu from cpus list during c
From: |
Bharata B Rao |
Subject: |
[Qemu-ppc] [RFC PATCH v4 01/11] exec: Remove cpu from cpus list during cpu_exec_exit() |
Date: |
Thu, 6 Aug 2015 10:57:07 +0530 |
CPUState *cpu gets added to the cpus list during cpu_exec_init(). It
should be removed from cpu_exec_exit().
cpu_exec_init() is called from generic CPU::instance_finalize and some
archs like PowerPC call it from CPU unrealizefn. So ensure that we
dequeue the cpu only once.
Instead of introducing a new field CPUState.queued, I could have used
CPUState.cpu_index to check if the cpu is already dequeued from the list.
Since that doesn't work for CONFIG_USER_ONLY, I had to add a new field.
Signed-off-by: Bharata B Rao <address@hidden>
---
exec.c | 11 +++++++++++
include/qom/cpu.h | 1 +
2 files changed, 12 insertions(+)
diff --git a/exec.c b/exec.c
index 0a4a0c5..b196d68 100644
--- a/exec.c
+++ b/exec.c
@@ -550,6 +550,10 @@ void cpu_exec_exit(CPUState *cpu)
return;
}
+ if (cpu->queued) {
+ QTAILQ_REMOVE(&cpus, cpu, node);
+ cpu->queued = false;
+ }
bitmap_clear(cpu_index_map, cpu->cpu_index, 1);
cpu->cpu_index = -1;
}
@@ -568,6 +572,12 @@ static int cpu_get_free_index(Error **errp)
void cpu_exec_exit(CPUState *cpu)
{
+ cpu_list_lock();
+ if (cpu->queued) {
+ QTAILQ_REMOVE(&cpus, cpu, node);
+ cpu->queued = false;
+ }
+ cpu_list_unlock();
}
#endif
@@ -595,6 +605,7 @@ void cpu_exec_init(CPUState *cpu, Error **errp)
return;
}
QTAILQ_INSERT_TAIL(&cpus, cpu, node);
+ cpu->queued = true;
#if defined(CONFIG_USER_ONLY)
cpu_list_unlock();
#endif
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index 20aabc9..a00e3a8 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -284,6 +284,7 @@ struct CPUState {
int gdb_num_regs;
int gdb_num_g_regs;
QTAILQ_ENTRY(CPUState) node;
+ bool queued;
/* ice debug support */
QTAILQ_HEAD(breakpoints_head, CPUBreakpoint) breakpoints;
--
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, 2015/08/06
- [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 <=
- [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
- Re: [Qemu-ppc] [Qemu-devel] [RFC PATCH v4 00/11] sPAPR CPU hotplug, Zhu Guihua, 2015/08/06
- Re: [Qemu-ppc] [RFC PATCH v4 00/11] sPAPR CPU hotplug, David Gibson, 2015/08/11