On Wed, 13 Sep 2017 15:24:17 +0200 David Hildenbrand <da...@redhat.com> wrote:
> SCLP correctly indicates the core-id aka. CPU address for each available > CPU. > > As the core-id corresponds to cpu_index, also a newly created kvm vcpu > gets assigned this core-id as vcpu id. So SIGP in the kernel works > correctly (it uses the vcpu id to lookup the correct CPU). > > So there should be nothing hindering us from hotplugging CPUs in random > core-id order. > > This now makes sure that the output from "query-hotpluggable-cpus" > is completely true. Until now, a specific order is implicit. Performance > vice, hotplugging CPUs in non-sequential order might not be the best thing > to do, as VCPU lookup inside KVM might be a little slower. But that > doesn't hinder us from supporting it. > > next_core_id is now used by linux user only. > > Signed-off-by: David Hildenbrand <da...@redhat.com> Reviewed-by: Igor Mammedov <imamm...@redhat.com> > --- > target/s390x/cpu.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 5724dffb88..34538c3ab9 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -199,6 +199,7 @@ static void s390_cpu_realizefn(DeviceState *dev, Error > **errp) > #else > /* implicitly set for linux-user only */ > cpu->env.core_id = scc->next_core_id; > + scc->next_core_id++; > #endif > > if (cpu_exists(cpu->env.core_id)) { > @@ -206,12 +207,6 @@ static void s390_cpu_realizefn(DeviceState *dev, Error > **errp) > ", it already exists", cpu->env.core_id); > goto out; > } > - if (cpu->env.core_id != scc->next_core_id) { > - error_setg(&err, "Unable to add CPU with core-id: %" PRIu32 > - ", the next available core-id is %" PRIu32, > cpu->env.core_id, > - scc->next_core_id); > - goto out; > - } > > /* sync cs->cpu_index and env->core_id. The latter is needed for TCG. */ > cs->cpu_index = env->core_id; > @@ -219,7 +214,6 @@ static void s390_cpu_realizefn(DeviceState *dev, Error > **errp) > if (err != NULL) { > goto out; > } > - scc->next_core_id++; > > #if !defined(CONFIG_USER_ONLY) > qemu_register_reset(s390_cpu_machine_reset_cb, cpu);