From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39308) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dq3CP-0004mQ-5j for qemu-devel@nongnu.org; Thu, 07 Sep 2017 16:14:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dq3CK-0002Ze-F3 for qemu-devel@nongnu.org; Thu, 07 Sep 2017 16:14:53 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59984) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dq3CK-0002ZK-9U for qemu-devel@nongnu.org; Thu, 07 Sep 2017 16:14:48 -0400 From: David Hildenbrand Date: Thu, 7 Sep 2017 22:13:35 +0200 Message-Id: <20170907201335.13956-22-david@redhat.com> In-Reply-To: <20170907201335.13956-1-david@redhat.com> References: <20170907201335.13956-1-david@redhat.com> Subject: [Qemu-devel] [PATCH v3 21/21] s390x: allow CPU hotplug in random core-id order List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Richard Henderson , thuth@redhat.com, cohuck@redhat.com, david@redhat.com, borntraeger@de.ibm.com, Alexander Graf , Eduardo Habkost , Matthew Rosato 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 --- 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 ad9dcdaaf1..5701a41112 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) cpu->env.core_id); goto out; } - if (cpu->env.core_id != scc->next_core_id) { - error_setg(&err, "Unable to add CPU: %" PRIu32 - ", the next available 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); -- 2.13.5