[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [RFC 09/52] hw/machine: Introduce core type for hybrid topology
From: |
Mi, Dapeng1 |
Subject: |
RE: [RFC 09/52] hw/machine: Introduce core type for hybrid topology |
Date: |
Tue, 14 Feb 2023 01:14:13 +0000 |
> From: Zhao Liu <zhao1.liu@linux.intel.com>
> Sent: Monday, February 13, 2023 5:50 PM
> To: Eduardo Habkost <eduardo@habkost.net>; Marcel Apfelbaum
> <marcel.apfelbaum@gmail.com>; Philippe Mathieu-Daudé <philmd@linaro.org>;
> Yanan Wang <wangyanan55@huawei.com>; Michael S . Tsirkin
> <mst@redhat.com>; Richard Henderson <richard.henderson@linaro.org>; Paolo
> Bonzini <pbonzini@redhat.com>; Eric Blake <eblake@redhat.com>; Markus
> Armbruster <armbru@redhat.com>
> Cc: qemu-devel@nongnu.org; Wang, Zhenyu Z <zhenyu.z.wang@intel.com>; Mi,
> Dapeng1 <dapeng1.mi@intel.com>; Ding, Zhuocheng
> <zhuocheng.ding@intel.com>; Robert Hoo <robert.hu@linux.intel.com>;
> Christopherson,, Sean <seanjc@google.com>; Like Xu
> <like.xu.linux@gmail.com>; Liu, Zhao1 <zhao1.liu@intel.com>
> Subject: [RFC 09/52] hw/machine: Introduce core type for hybrid topology
>
> From: Zhao Liu <zhao1.liu@intel.com>
>
> Under the hybrid cpu topology, some CPUs care about the core type.
> For example, Intel's Alder Lake series CPU contains two types of cores:
> Intel Core and Intel Atom. The type information of these two types is exposed
> in
> 1A leaf of CPUID.
>
> Core type should also be part of the hybrid topology, and
> MachineState.cpu_type cannot provide different type information for different
> cpus in the same machine, so add a type field for the core level in the
> hybrid cpu
> topology.
>
> Additionally, add a helper to get core type information from MachineState.
> Though core_type is only used in hybrid case, don't use assert since it may be
> used to initialize some generic fields.
>
> Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
> ---
> hw/core/machine-topo.c | 12 ++++++++++++
> include/hw/boards.h | 3 +++
> include/hw/cpu/cpu-topology.h | 2 ++
> 3 files changed, 17 insertions(+)
>
> diff --git a/hw/core/machine-topo.c b/hw/core/machine-topo.c index
> b20160479629..e0ec07b53d42 100644
> --- a/hw/core/machine-topo.c
> +++ b/hw/core/machine-topo.c
> @@ -51,6 +51,18 @@ unsigned int machine_topo_get_smp_threads(const
> MachineState *ms)
> return ms->topo.smp.threads;
> }
>
> +unsigned int machine_topo_get_hybrid_core_type(const MachineState *ms,
> + unsigned int cluster_id,
> + unsigned int core_id) {
> + if (!machine_topo_is_smp(ms)) {
> + return ms->topo.hybrid.cluster_list[cluster_id]
> + .core_list[core_id].core_type;
> + } else {
> + return 0;
> + }
> +}
> +
We'd better not to return the hard-coded '0'. Suggest to define a 'enum'
data structure to represent the core_type. This makes the code look more
intuitively.
> unsigned int machine_topo_get_threads(const MachineState *ms,
> unsigned int cluster_id,
> unsigned int core_id) diff --git
> a/include/hw/boards.h
> b/include/hw/boards.h index 34b64b012022..78e52af38cb1 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -484,6 +484,9 @@ unsigned int machine_topo_get_dies(const
> MachineState *ms); unsigned int machine_topo_get_clusters(const
> MachineState *ms); unsigned int machine_topo_get_smp_cores(const
> MachineState *ms); unsigned int machine_topo_get_smp_threads(const
> MachineState *ms);
> +unsigned int machine_topo_get_hybrid_core_type(const MachineState *ms,
> + unsigned int cluster_id,
> + unsigned int core_id);
> unsigned int machine_topo_get_threads(const MachineState *ms,
> unsigned int cluster_id,
> unsigned int core_id); diff --git
> a/include/hw/cpu/cpu-
> topology.h b/include/hw/cpu/cpu-topology.h index
> 8268ea3a8569..87d832556229 100644
> --- a/include/hw/cpu/cpu-topology.h
> +++ b/include/hw/cpu/cpu-topology.h
> @@ -45,9 +45,11 @@ typedef struct SmpCpuTopology {
> /**
> * HybridCore - hybrid core topology defination:
> * @threads: the number of threads in one core.
> + * @core_type: the type of current core.
> */
> typedef struct HybridCore {
> unsigned int threads;
> + unsigned int core_type;
> } HybridCore;
>
> /**
> --
> 2.34.1
[RFC 14/52] hw/smbios: Use generic topology name and helper, Zhao Liu, 2023/02/13
[RFC 13/52] cpu/core: Use generic topology helper for "help" to set nr_threads, Zhao Liu, 2023/02/13
[RFC 15/52] migration/postcopy-ram: Use generic topology name and helper, Zhao Liu, 2023/02/13