pc: Add x86_topo_ids_from_apicid()

It's reverse of apicid_from_topo_ids() and will be used in follow up
patches to fill in data structures for query-hotpluggable-cpus and
for user friendly error reporting.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Igor Mammedov 2016-07-06 08:20:38 +02:00 committed by Eduardo Habkost
parent d9c84f1969
commit 9f3aab5853
1 changed files with 15 additions and 0 deletions

View File

@ -117,6 +117,21 @@ static inline void x86_topo_ids_from_idx(unsigned nr_cores,
topo->pkg_id = core_index / nr_cores; topo->pkg_id = core_index / nr_cores;
} }
/* Calculate thread/core/package IDs for a specific topology,
* based on APIC ID
*/
static inline void x86_topo_ids_from_apicid(apic_id_t apicid,
unsigned nr_cores,
unsigned nr_threads,
X86CPUTopoInfo *topo)
{
topo->smt_id = apicid &
~(0xFFFFFFFFUL << apicid_smt_width(nr_cores, nr_threads));
topo->core_id = (apicid >> apicid_core_offset(nr_cores, nr_threads)) &
~(0xFFFFFFFFUL << apicid_core_width(nr_cores, nr_threads));
topo->pkg_id = apicid >> apicid_pkg_offset(nr_cores, nr_threads);
}
/* Make APIC ID for the CPU 'cpu_index' /* Make APIC ID for the CPU 'cpu_index'
* *
* 'cpu_index' is a sequential, contiguous ID for the CPU. * 'cpu_index' is a sequential, contiguous ID for the CPU.