arch/x86/kernel/cpu/topology.h
Source file repositories/reference/linux-study-clean/arch/x86/kernel/cpu/topology.h
File Facts
- System
- Linux kernel
- Corpus path
arch/x86/kernel/cpu/topology.h- Extension
.h- Size
- 2050 bytes
- Lines
- 68
- Domain
- Architecture Layer
- Bucket
- arch/x86
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
struct topo_scanfunction topo_shift_apicidfunction topo_relative_domain_idfunction topo_domain_maskfunction topology_update_domfunction topology_unit_count
Annotated Snippet
struct topo_scan {
struct cpuinfo_x86 *c;
unsigned int dom_shifts[TOPO_MAX_DOMAIN];
unsigned int dom_ncpus[TOPO_MAX_DOMAIN];
/* Legacy CPUID[1]:EBX[23:16] number of logical processors */
unsigned int ebx1_nproc_shift;
/* AMD specific node ID which cannot be mapped into APIC space. */
u16 amd_nodes_per_pkg;
u16 amd_node_id;
};
void cpu_init_topology(struct cpuinfo_x86 *c);
void cpu_parse_topology(struct cpuinfo_x86 *c);
void topology_set_dom(struct topo_scan *tscan, enum x86_topology_domains dom,
unsigned int shift, unsigned int ncpus);
bool cpu_parse_topology_ext(struct topo_scan *tscan);
void cpu_parse_topology_amd(struct topo_scan *tscan);
void cpu_topology_fixup_amd(struct topo_scan *tscan);
static inline u32 topo_shift_apicid(u32 apicid, enum x86_topology_domains dom)
{
if (dom == TOPO_SMT_DOMAIN)
return apicid;
return apicid >> x86_topo_system.dom_shifts[dom - 1];
}
static inline u32 topo_relative_domain_id(u32 apicid, enum x86_topology_domains dom)
{
if (dom != TOPO_SMT_DOMAIN)
apicid >>= x86_topo_system.dom_shifts[dom - 1];
return apicid & (x86_topo_system.dom_size[dom] - 1);
}
static inline u32 topo_domain_mask(enum x86_topology_domains dom)
{
return (1U << x86_topo_system.dom_shifts[dom]) - 1;
}
/*
* Update a domain level after the fact without propagating. Used to fixup
* broken CPUID enumerations.
*/
static inline void topology_update_dom(struct topo_scan *tscan, enum x86_topology_domains dom,
unsigned int shift, unsigned int ncpus)
{
tscan->dom_shifts[dom] = shift;
tscan->dom_ncpus[dom] = ncpus;
}
#ifdef CONFIG_X86_LOCAL_APIC
unsigned int topology_unit_count(u32 apicid, enum x86_topology_domains which_units,
enum x86_topology_domains at_level);
#else
static inline unsigned int topology_unit_count(u32 apicid, enum x86_topology_domains which_units,
enum x86_topology_domains at_level)
{
return 1;
}
#endif
#endif /* ARCH_X86_TOPOLOGY_H */
Annotation
- Detected declarations: `struct topo_scan`, `function topo_shift_apicid`, `function topo_relative_domain_id`, `function topo_domain_mask`, `function topology_update_dom`, `function topology_unit_count`.
- Atlas domain: Architecture Layer / arch/x86.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.