arch/x86/include/asm/uv/uv_hub.h
Source file repositories/reference/linux-study-clean/arch/x86/include/asm/uv/uv_hub.h
File Facts
- System
- Linux kernel
- Corpus path
arch/x86/include/asm/uv/uv_hub.h- Extension
.h- Size
- 23578 bytes
- Lines
- 790
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/numa.hlinux/percpu.hlinux/timer.hlinux/io.hlinux/topology.hasm/types.hasm/percpu.hasm/uv/uv.hasm/uv/uv_mmrs.hasm/uv/bios.hasm/irq_vectors.hasm/io_apic.h
Detected Declarations
struct uv_gam_range_sstruct uv_hub_info_sstruct uv_cpu_info_sstruct uvh_apicid_sstruct uv_hub_nmi_sstruct uv_cpu_nmi_sfunction uv_hub_typefunction uv_hub_type_setfunction is_uvfunction is_uv1_hubfunction is_uv2_hubfunction is_uv3_hubfunction is_uv4a_hubfunction is_uv4_hubfunction is_uv5_hubfunction is_uv4a_hubfunction is_uvy_hubfunction is_uv_hubfunction uv_gpa_shiftfunction uv_gam_range_basefunction uv_soc_phys_ram_to_nasidfunction uv_gpa_nasidfunction uv_soc_phys_ram_to_gpafunction uv_gpafunction uv_gpa_in_mmr_spacefunction uv_gpa_to_soc_phys_ramfunction uv_gpa_to_gnodefunction uv_gpa_to_pnodefunction uv_gpa_to_offsetfunction _uv_socket_to_nodefunction uv_socket_to_nodefunction uv_pnode_to_socketfunction uv_apicid_to_pnodefunction uv_write_global_mmr32function uv_read_global_mmr32function uv_write_global_mmr64function uv_read_global_mmr64function uv_write_global_mmr8function uv_read_global_mmr8function uv_read_local_mmrfunction uv_write_local_mmrfunction uv_read_local_mmr8function uv_write_local_mmr8function uv_blade_processor_idfunction uv_cpu_blade_processor_idfunction uv_blade_to_nodefunction uv_numa_blade_idfunction uv_node_to_blade_id
Annotated Snippet
struct uv_gam_range_s {
u32 limit; /* PA bits 56:26 (GAM_RANGE_SHFT) */
u16 nasid; /* node's global physical address */
s8 base; /* entry index of node's base addr */
u8 reserved;
};
/*
* The following defines attributes of the HUB chip. These attributes are
* frequently referenced and are kept in a common per hub struct.
* After setup, the struct is read only, so it should be readily
* available in the L3 cache on the cpu socket for the node.
*/
struct uv_hub_info_s {
unsigned int hub_type;
unsigned char hub_revision;
unsigned long global_mmr_base;
unsigned long global_mmr_shift;
unsigned long gpa_mask;
unsigned short *socket_to_node;
unsigned short *socket_to_pnode;
unsigned short *pnode_to_socket;
struct uv_gam_range_s *gr_table;
unsigned short min_socket;
unsigned short min_pnode;
unsigned char m_val;
unsigned char n_val;
unsigned char gr_table_len;
unsigned char apic_pnode_shift;
unsigned char gpa_shift;
unsigned char nasid_shift;
unsigned char m_shift;
unsigned char n_lshift;
unsigned int gnode_extra;
unsigned long gnode_upper;
unsigned long lowmem_remap_top;
unsigned long lowmem_remap_base;
unsigned long global_gru_base;
unsigned long global_gru_shift;
unsigned short pnode;
unsigned short pnode_mask;
unsigned short coherency_domain_number;
unsigned short numa_blade_id;
unsigned short nr_possible_cpus;
unsigned short nr_online_cpus;
short memory_nid;
unsigned short *node_to_socket;
};
/* CPU specific info with a pointer to the hub common info struct */
struct uv_cpu_info_s {
void *p_uv_hub_info;
unsigned char blade_cpu_id;
void *reserved;
};
DECLARE_PER_CPU(struct uv_cpu_info_s, __uv_cpu_info);
#define uv_cpu_info this_cpu_ptr(&__uv_cpu_info)
#define uv_cpu_info_per(cpu) (&per_cpu(__uv_cpu_info, cpu))
/* Node specific hub common info struct */
extern void **__uv_hub_info_list;
static inline struct uv_hub_info_s *uv_hub_info_list(int node)
{
return (struct uv_hub_info_s *)__uv_hub_info_list[node];
}
static inline struct uv_hub_info_s *_uv_hub_info(void)
{
return (struct uv_hub_info_s *)uv_cpu_info->p_uv_hub_info;
}
#define uv_hub_info _uv_hub_info()
static inline struct uv_hub_info_s *uv_cpu_hub_info(int cpu)
{
return (struct uv_hub_info_s *)uv_cpu_info_per(cpu)->p_uv_hub_info;
}
static inline int uv_hub_type(void)
{
return uv_hub_info->hub_type;
}
static inline __init void uv_hub_type_set(int uvmask)
{
uv_hub_info->hub_type = uvmask;
}
/*
Annotation
- Immediate include surface: `linux/numa.h`, `linux/percpu.h`, `linux/timer.h`, `linux/io.h`, `linux/topology.h`, `asm/types.h`, `asm/percpu.h`, `asm/uv/uv.h`.
- Detected declarations: `struct uv_gam_range_s`, `struct uv_hub_info_s`, `struct uv_cpu_info_s`, `struct uvh_apicid_s`, `struct uv_hub_nmi_s`, `struct uv_cpu_nmi_s`, `function uv_hub_type`, `function uv_hub_type_set`, `function is_uv`, `function is_uv1_hub`.
- Atlas domain: Architecture Layer / arch/x86.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.