qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 06/11] target-i386: add socket/core/thread prope


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH 06/11] target-i386: add socket/core/thread properties to X86CPU
Date: Thu, 23 Jun 2016 21:18:38 +0200

On Thu, 23 Jun 2016 14:44:53 -0300
Eduardo Habkost <address@hidden> wrote:

> 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 <address@hidden>
> > ---
> >  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?
they shouldn't since query_hotpluggable_cpus doesn't have apic_id
attribute so apic_id isn't supposed to be on user provided,
but of cause user could add it manually on device_add command to create
confusion, in that case apic_id would take precedence and
socket/core/thread ignored.

> 
> 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.
all CPUs pass through pc_cpu_pre_plug() before cpu.relizefn()
so I'd rather do it here at board level responsible for
setting apic_id or socket/core/thread info is not set.


> 
> >  }
> >  
> >  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
> > 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]