[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 5/9] pc: Init CPUState->cpu_index with index in possi
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL 5/9] pc: Init CPUState->cpu_index with index in possible_cpus[] |
Date: |
Wed, 27 Jul 2016 11:29:17 -0300 |
From: Igor Mammedov <address@hidden>
It will enshure that cpu_index for a given cpu stays the same
regardless of the order cpus has been created/deleted.
No compat code is needed as for initial cpus index in
possible_cpus[] matches cpu_index that's been auto-allocated
in cpu_exec_init().
Tha same applies for hotplug with cpu-add command if cpus are
added sequentially in increasing order as 'id' matches cpu_index.
If cpu-add had been used for creating out-of-order cpus,
that created unmigratable instance since it were not possible
to start target with the same cpu_index using old way
of migrating instance with hotplugged cpus:
* source QEMU with CLI (-smp 1,maxcpus=3 and cpu-add id=2)
following set of cpu_index is allocated [0, 1] with
apics set [0, 2] respectivelly
* target QEMU is started with CLI -smp 2,maxcpus=3
resulting in set of cpu_index [0, 1] but with
set of apics [0, 1] wich doesn't match source.
So we don't need compat code in this case as it's never worked
and newelly added device_add support would use stable cpu_index
set by machine to begin with, so it won't have above limitation
and source QEMU could be migrated to destination regardless
of the order cpus were created.
Signed-off-by: Igor Mammedov <address@hidden>
Reviewed-by: David Gibson <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
hw/i386/pc.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 9e3c70f..d6f0347 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1875,6 +1875,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
DeviceState *dev, Error **errp)
{
int idx;
+ CPUState *cs;
CPUArchId *cpu_slot;
X86CPUTopoInfo topo;
X86CPU *cpu = X86_CPU(dev);
@@ -1975,6 +1976,9 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
return;
}
cpu->thread_id = topo.smt_id;
+
+ cs = CPU(cpu);
+ cs->cpu_index = idx;
}
static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
--
2.5.5
- [Qemu-devel] [PULL 0/9] x86 and machine queue, 2016-07-27, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 1/9] exec: Reduce CONFIG_USER_ONLY ifdeffenery, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 2/9] exec: Don't use cpu_index to detect if cpu_exec_init()'s been called, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 3/9] exec: Set cpu_index only if it's not been explictly set, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 4/9] qdev: Fix object reference leak in case device.realize() fails, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 6/9] Revert "pc: Enforce adding CPUs contiguously and removing them in opposite order", Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 5/9] pc: Init CPUState->cpu_index with index in possible_cpus[],
Eduardo Habkost <=
- [Qemu-devel] [PULL 7/9] machine: Add comment to abort path in machine_set_kernel_irqchip, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 8/9] qdev: ignore GlobalProperty.errp for hotplugged devices, Eduardo Habkost, 2016/07/27
- [Qemu-devel] [PULL 9/9] vl: exit if a bad property value is passed to -global, Eduardo Habkost, 2016/07/27
- Re: [Qemu-devel] [PULL 0/9] x86 and machine queue, 2016-07-27, Peter Maydell, 2016/07/28