[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 10/14] spapr: Ensure CPU cores are added contiguously a
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 10/14] spapr: Ensure CPU cores are added contiguously and removed in LIFO order |
Date: |
Mon, 18 Jul 2016 14:38:46 +1000 |
From: Bharata B Rao <address@hidden>
If CPU core addition or removal is allowed in random order leading to
holes in the core id range (and hence in the cpu_index range), migration
can fail as migration with holes in cpu_index range isn't yet handled
correctly.
Prevent this situation by enforcing the addition in contiguous order
and removal in LIFO order so that we never end up with holes in
cpu_index range.
Signed-off-by: Bharata B Rao <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
hw/ppc/spapr_cpu_core.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index bc52b3c..4bfc96b 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -126,12 +126,23 @@ static void spapr_core_release(DeviceState *dev, void
*opaque)
void spapr_core_unplug(HotplugHandler *hotplug_dev, DeviceState *dev,
Error **errp)
{
+ sPAPRMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev));
CPUCore *cc = CPU_CORE(dev);
sPAPRDRConnector *drc =
spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, cc->core_id);
sPAPRDRConnectorClass *drck;
Error *local_err = NULL;
+ int smt = kvmppc_smt_threads();
+ int index = cc->core_id / smt;
+ int spapr_max_cores = max_cpus / smp_threads;
+ int i;
+ for (i = spapr_max_cores - 1; i > index; i--) {
+ if (spapr->cores[i]) {
+ error_setg(errp, "core-id %d should be removed first", i * smt);
+ return;
+ }
+ }
g_assert(drc);
drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
@@ -214,7 +225,7 @@ void spapr_core_pre_plug(HotplugHandler *hotplug_dev,
DeviceState *dev,
sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(OBJECT(hotplug_dev));
sPAPRMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev));
int spapr_max_cores = max_cpus / smp_threads;
- int index;
+ int index, i;
int smt = kvmppc_smt_threads();
Error *local_err = NULL;
CPUCore *cc = CPU_CORE(dev);
@@ -252,6 +263,14 @@ void spapr_core_pre_plug(HotplugHandler *hotplug_dev,
DeviceState *dev,
goto out;
}
+ for (i = 0; i < index; i++) {
+ if (!spapr->cores[i]) {
+ error_setg(&local_err, "core-id %d should be added first",
+ i * smt);
+ goto out;
+ }
+ }
+
out:
g_free(base_core_type);
error_propagate(errp, local_err);
--
2.7.4
- [Qemu-ppc] [PULL 00/14] ppc-for-2.7 queue 20160718, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 02/14] dbdma: always define DBDMA_DPRINTF and enable debug with DEBUG_DBDMA, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 01/14] spapr: fix core unplug crash, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 14/14] ppc: Yet another fix for the huge page support detection mechanism, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 03/14] dbdma: add per-channel debugging enabled via DEBUG_DBDMA_CHANMASK, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 05/14] dbdma: fix load_word/store_word value endianness, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 10/14] spapr: Ensure CPU cores are added contiguously and removed in LIFO order,
David Gibson <=
- [Qemu-ppc] [PULL 07/14] dbdma: reset io->processing flag for unassigned DBDMA channel rw accesses, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 13/14] target-ppc: fix left shift overflow in hpte_page_shift, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 06/14] dbdma: set FLUSH bit upon reception of flush command for unassigned DBDMA channels, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 08/14] ppc: Fix support for odd MSR combinations, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 04/14] dbdma: fix endian of DBDMA_CMDPTR_LO during branch, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 12/14] ppc/mmu-hash64: Remove duplicated #include statement, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 09/14] vfio/spapr: Remove stale ioctl() call, David Gibson, 2016/07/18
- [Qemu-ppc] [PULL 11/14] ppc: abort if compat property contains an unknown value, David Gibson, 2016/07/18
- Re: [Qemu-ppc] [PULL 00/14] ppc-for-2.7 queue 20160718, Peter Maydell, 2016/07/18