From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34861) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bG8gY-0005pF-E2 for qemu-devel@nongnu.org; Thu, 23 Jun 2016 13:45:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bG8gT-0003mA-6d for qemu-devel@nongnu.org; Thu, 23 Jun 2016 13:45:01 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55493) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bG8gS-0003lH-Tg for qemu-devel@nongnu.org; Thu, 23 Jun 2016 13:44:57 -0400 Date: Thu, 23 Jun 2016 14:44:53 -0300 From: Eduardo Habkost Message-ID: <20160623174453.GD3332@thinpad.lan.raisama.net> References: <1466693669-139967-1-git-send-email-imammedo@redhat.com> <1466693669-139967-7-git-send-email-imammedo@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1466693669-139967-7-git-send-email-imammedo@redhat.com> Subject: Re: [Qemu-devel] [PATCH 06/11] target-i386: add socket/core/thread properties to X86CPU List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Mammedov Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, armbru@redhat.com, eduardo.otubo@profitbricks.com, zhugh.fnst@cn.fujitsu.com, eblake@redhat.com On Thu, Jun 23, 2016 at 04:54:24PM +0200, Igor Mammedov wrote: > these properties will be used by as address where to plug > CPU with help -device/device_add commands. > > Signed-off-by: Igor Mammedov > --- > hw/i386/pc.c | 12 ++++++++++++ > target-i386/cpu.c | 3 +++ > target-i386/cpu.h | 4 ++++ > 3 files changed, 19 insertions(+) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 6ba6343..87352ae 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1775,6 +1775,18 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, > cpu->apic_id); > return; > } > + > + /* set 'address' properties socket/core/thread for initial and cpu-add > + * added CPUs so that query_hotpluggable_cpus would show correct values > + */ > + if (cpu->thread == -1 || cpu->core == -1 || cpu->socket == -1) { > + X86CPUTopoInfo topo; > + > + x86_topo_ids_from_apicid(cpu->apic_id, smp_cores, smp_threads, &topo); > + cpu->thread = topo.smt_id; > + cpu->core = topo.core_id; > + cpu->socket = topo.pkg_id; > + } What if both apic-id and socket/core/thread are set? I suggest validating the properties, and setting them in case they are not set: x86_topo_ids_from_apicid(cpu->apic_id, smp_cores, smp_threads, &topo); if (cpu->socket != -1 && cpu->socket != topo.socket_id) { error_setg(errp, "CPU socket ID mismatch: ..."); return; } cpu->socket = topo.socket_id; if (cpu->core != -1 && cpu->core != topo.core_id) { error_setg(errp, "CPU core ID mismatch: ..."); return; } cpu->core = topo.core_id; if (cpu->thread != -1 && cpu->thread != topo.smt_id) { error_setg(errp, "CPU thread ID mismatch: ..."); return; } cpu->thread = topo.smt_id; We could do that inside x86_cpu_realizefn(), so that socket/core/thread would be always set in all CPUs. > } > > static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 9294b3d..8c651f2 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -3186,6 +3186,9 @@ static Property x86_cpu_properties[] = { > DEFINE_PROP_UINT32("xlevel2", X86CPU, env.cpuid_xlevel2, 0), > DEFINE_PROP_STRING("hv-vendor-id", X86CPU, hyperv_vendor_id), > DEFINE_PROP_BOOL("cpuid-0xb", X86CPU, enable_cpuid_0xb, true), > + DEFINE_PROP_INT32("thread", X86CPU, thread, -1), > + DEFINE_PROP_INT32("core", X86CPU, core, -1), > + DEFINE_PROP_INT32("socket", X86CPU, socket, -1), > DEFINE_PROP_END_OF_LIST() > }; > > diff --git a/target-i386/cpu.h b/target-i386/cpu.h > index 8b09cfa..a04d334 100644 > --- a/target-i386/cpu.h > +++ b/target-i386/cpu.h > @@ -1190,6 +1190,10 @@ struct X86CPU { > Notifier machine_done; > > struct kvm_msrs *kvm_msr_buf; > + > + int32_t socket; > + int32_t core; > + int32_t thread; > }; > > static inline X86CPU *x86_env_get_cpu(CPUX86State *env) > -- > 1.8.3.1 > -- Eduardo