mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
i386: Support modules_per_die in X86CPUTopoInfo
Support module level in i386 cpu topology structure "X86CPUTopoInfo". Since x86 does not yet support the "modules" parameter in "-smp", X86CPUTopoInfo.modules_per_die is currently always 1. Therefore, the module level width in APIC ID, which can be calculated by "apicid_bitwidth_for_count(topo_info->modules_per_die)", is always 0 for now, so we can directly add APIC ID related helpers to support module level parsing. In addition, update topology structure in test-x86-topo.c. Tested-by: Yongwei Ma <yongwei.ma@intel.com> Co-developed-by: Zhuocheng Ding <zhuocheng.ding@intel.com> Signed-off-by: Zhuocheng Ding <zhuocheng.ding@intel.com> Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Tested-by: Babu Moger <babu.moger@amd.com> Message-ID: <20240424154929.1487382-14-zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
81c392ab5c
commit
3568adc995
4 changed files with 58 additions and 31 deletions
|
@ -56,7 +56,8 @@ typedef struct X86CPUTopoIDs {
|
|||
|
||||
typedef struct X86CPUTopoInfo {
|
||||
unsigned dies_per_pkg;
|
||||
unsigned cores_per_die;
|
||||
unsigned modules_per_die;
|
||||
unsigned cores_per_module;
|
||||
unsigned threads_per_core;
|
||||
} X86CPUTopoInfo;
|
||||
|
||||
|
@ -92,7 +93,13 @@ static inline unsigned apicid_smt_width(X86CPUTopoInfo *topo_info)
|
|||
/* Bit width of the Core_ID field */
|
||||
static inline unsigned apicid_core_width(X86CPUTopoInfo *topo_info)
|
||||
{
|
||||
return apicid_bitwidth_for_count(topo_info->cores_per_die);
|
||||
return apicid_bitwidth_for_count(topo_info->cores_per_module);
|
||||
}
|
||||
|
||||
/* Bit width of the Module_ID field */
|
||||
static inline unsigned apicid_module_width(X86CPUTopoInfo *topo_info)
|
||||
{
|
||||
return apicid_bitwidth_for_count(topo_info->modules_per_die);
|
||||
}
|
||||
|
||||
/* Bit width of the Die_ID field */
|
||||
|
@ -107,10 +114,16 @@ static inline unsigned apicid_core_offset(X86CPUTopoInfo *topo_info)
|
|||
return apicid_smt_width(topo_info);
|
||||
}
|
||||
|
||||
/* Bit offset of the Module_ID field */
|
||||
static inline unsigned apicid_module_offset(X86CPUTopoInfo *topo_info)
|
||||
{
|
||||
return apicid_core_offset(topo_info) + apicid_core_width(topo_info);
|
||||
}
|
||||
|
||||
/* Bit offset of the Die_ID field */
|
||||
static inline unsigned apicid_die_offset(X86CPUTopoInfo *topo_info)
|
||||
{
|
||||
return apicid_core_offset(topo_info) + apicid_core_width(topo_info);
|
||||
return apicid_module_offset(topo_info) + apicid_module_width(topo_info);
|
||||
}
|
||||
|
||||
/* Bit offset of the Pkg_ID (socket ID) field */
|
||||
|
@ -142,7 +155,8 @@ static inline void x86_topo_ids_from_idx(X86CPUTopoInfo *topo_info,
|
|||
X86CPUTopoIDs *topo_ids)
|
||||
{
|
||||
unsigned nr_dies = topo_info->dies_per_pkg;
|
||||
unsigned nr_cores = topo_info->cores_per_die;
|
||||
unsigned nr_cores = topo_info->cores_per_module *
|
||||
topo_info->modules_per_die;
|
||||
unsigned nr_threads = topo_info->threads_per_core;
|
||||
|
||||
topo_ids->pkg_id = cpu_index / (nr_dies * nr_cores * nr_threads);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue