cpu: Introduce X86CPUTopoInfo structure for argument simplification
In order to simplify arguments of function, introduce a new struct named X86CPUTopoInfo. Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
		
							parent
							
								
									c0b520dfb8
								
							
						
					
					
						commit
						ed256144cd
					
				@ -1935,10 +1935,10 @@ static void pc_machine_initfn(Object *obj)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static unsigned pc_cpu_index_to_socket_id(unsigned cpu_index)
 | 
					static unsigned pc_cpu_index_to_socket_id(unsigned cpu_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned pkg_id, core_id, smt_id;
 | 
					    X86CPUTopoInfo topo;
 | 
				
			||||||
    x86_topo_ids_from_idx(smp_cores, smp_threads, cpu_index,
 | 
					    x86_topo_ids_from_idx(smp_cores, smp_threads, cpu_index,
 | 
				
			||||||
                          &pkg_id, &core_id, &smt_id);
 | 
					                          &topo);
 | 
				
			||||||
    return pkg_id;
 | 
					    return topo.pkg_id;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void pc_machine_class_init(ObjectClass *oc, void *data)
 | 
					static void pc_machine_class_init(ObjectClass *oc, void *data)
 | 
				
			||||||
 | 
				
			|||||||
@ -47,6 +47,12 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
typedef uint32_t apic_id_t;
 | 
					typedef uint32_t apic_id_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct X86CPUTopoInfo {
 | 
				
			||||||
 | 
					    unsigned pkg_id;
 | 
				
			||||||
 | 
					    unsigned core_id;
 | 
				
			||||||
 | 
					    unsigned smt_id;
 | 
				
			||||||
 | 
					} X86CPUTopoInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Return the bit width needed for 'count' IDs
 | 
					/* Return the bit width needed for 'count' IDs
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned apicid_bitwidth_for_count(unsigned count)
 | 
					static unsigned apicid_bitwidth_for_count(unsigned count)
 | 
				
			||||||
@ -92,13 +98,11 @@ static inline unsigned apicid_pkg_offset(unsigned nr_cores, unsigned nr_threads)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static inline apic_id_t apicid_from_topo_ids(unsigned nr_cores,
 | 
					static inline apic_id_t apicid_from_topo_ids(unsigned nr_cores,
 | 
				
			||||||
                                             unsigned nr_threads,
 | 
					                                             unsigned nr_threads,
 | 
				
			||||||
                                             unsigned pkg_id,
 | 
					                                             const X86CPUTopoInfo *topo)
 | 
				
			||||||
                                             unsigned core_id,
 | 
					 | 
				
			||||||
                                             unsigned smt_id)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return (pkg_id  << apicid_pkg_offset(nr_cores, nr_threads)) |
 | 
					    return (topo->pkg_id  << apicid_pkg_offset(nr_cores, nr_threads)) |
 | 
				
			||||||
           (core_id << apicid_core_offset(nr_cores, nr_threads)) |
 | 
					           (topo->core_id << apicid_core_offset(nr_cores, nr_threads)) |
 | 
				
			||||||
           smt_id;
 | 
					           topo->smt_id;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Calculate thread/core/package IDs for a specific topology,
 | 
					/* Calculate thread/core/package IDs for a specific topology,
 | 
				
			||||||
@ -107,14 +111,12 @@ static inline apic_id_t apicid_from_topo_ids(unsigned nr_cores,
 | 
				
			|||||||
static inline void x86_topo_ids_from_idx(unsigned nr_cores,
 | 
					static inline void x86_topo_ids_from_idx(unsigned nr_cores,
 | 
				
			||||||
                                         unsigned nr_threads,
 | 
					                                         unsigned nr_threads,
 | 
				
			||||||
                                         unsigned cpu_index,
 | 
					                                         unsigned cpu_index,
 | 
				
			||||||
                                         unsigned *pkg_id,
 | 
					                                         X86CPUTopoInfo *topo)
 | 
				
			||||||
                                         unsigned *core_id,
 | 
					 | 
				
			||||||
                                         unsigned *smt_id)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned core_index = cpu_index / nr_threads;
 | 
					    unsigned core_index = cpu_index / nr_threads;
 | 
				
			||||||
    *smt_id = cpu_index % nr_threads;
 | 
					    topo->smt_id = cpu_index % nr_threads;
 | 
				
			||||||
    *core_id = core_index % nr_cores;
 | 
					    topo->core_id = core_index % nr_cores;
 | 
				
			||||||
    *pkg_id = core_index / nr_cores;
 | 
					    topo->pkg_id = core_index / nr_cores;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Make APIC ID for the CPU 'cpu_index'
 | 
					/* Make APIC ID for the CPU 'cpu_index'
 | 
				
			||||||
@ -125,10 +127,9 @@ static inline apic_id_t x86_apicid_from_cpu_idx(unsigned nr_cores,
 | 
				
			|||||||
                                                unsigned nr_threads,
 | 
					                                                unsigned nr_threads,
 | 
				
			||||||
                                                unsigned cpu_index)
 | 
					                                                unsigned cpu_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned pkg_id, core_id, smt_id;
 | 
					    X86CPUTopoInfo topo;
 | 
				
			||||||
    x86_topo_ids_from_idx(nr_cores, nr_threads, cpu_index,
 | 
					    x86_topo_ids_from_idx(nr_cores, nr_threads, cpu_index, &topo);
 | 
				
			||||||
                          &pkg_id, &core_id, &smt_id);
 | 
					    return apicid_from_topo_ids(nr_cores, nr_threads, &topo);
 | 
				
			||||||
    return apicid_from_topo_ids(nr_cores, nr_threads, pkg_id, core_id, smt_id);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* HW_I386_TOPOLOGY_H */
 | 
					#endif /* HW_I386_TOPOLOGY_H */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user