arch/s390/include/asm/smp.h
Source file repositories/reference/linux-study-clean/arch/s390/include/asm/smp.h
File Facts
- System
- Linux kernel
- Corpus path
arch/s390/include/asm/smp.h- Extension
.h- Size
- 2633 bytes
- Lines
- 91
- Domain
- Architecture Layer
- Bucket
- arch/s390
- 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
asm/processor.hasm/lowcore.hasm/machine.hasm/sigp.h
Detected Declarations
function Authorfunction smp_stop_cpufunction smp_get_base_cpufunction smp_cpus_done
Annotated Snippet
#ifndef __ASM_SMP_H
#define __ASM_SMP_H
#include <asm/processor.h>
#include <asm/lowcore.h>
#include <asm/machine.h>
#include <asm/sigp.h>
static __always_inline unsigned int raw_smp_processor_id(void)
{
unsigned long lc_cpu_nr;
unsigned int cpu;
BUILD_BUG_ON(sizeof_field(struct lowcore, cpu_nr) != sizeof(cpu));
lc_cpu_nr = offsetof(struct lowcore, cpu_nr);
asm_inline(
ALTERNATIVE(" ly %[cpu],%[offzero](%%r0)\n",
" ly %[cpu],%[offalt](%%r0)\n",
ALT_FEATURE(MFEATURE_LOWCORE))
: [cpu] "=d" (cpu)
: [offzero] "i" (lc_cpu_nr),
[offalt] "i" (lc_cpu_nr + LOWCORE_ALT_ADDRESS),
"m" (((struct lowcore *)0)->cpu_nr));
return cpu;
}
#define arch_scale_cpu_capacity smp_cpu_get_capacity
extern struct mutex smp_cpu_state_mutex;
extern unsigned int smp_cpu_mt_shift;
extern unsigned int smp_cpu_mtid;
extern __vector128 __initdata boot_cpu_vector_save_area[__NUM_VXRS];
extern cpumask_t cpu_setup_mask;
extern int __cpu_up(unsigned int cpu, struct task_struct *tidle);
extern void arch_send_call_function_single_ipi(int cpu);
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
extern void __noreturn smp_call_ipl_cpu(void (*func)(void *), void *data);
extern void smp_emergency_stop(void);
extern int smp_find_processor_id(u16 address);
extern int smp_store_status(int cpu);
extern void smp_save_dump_ipl_cpu(void);
extern void smp_save_dump_secondary_cpus(void);
extern void smp_yield_cpu(int cpu);
extern void smp_cpu_set_polarization(int cpu, int val);
extern int smp_cpu_get_polarization(int cpu);
extern void smp_cpu_set_capacity(int cpu, unsigned long val);
extern void smp_set_core_capacity(int cpu, unsigned long val);
extern unsigned long smp_cpu_get_capacity(int cpu);
extern int smp_cpu_get_cpu_address(int cpu);
extern void smp_fill_possible_mask(void);
extern void smp_detect_cpus(void);
static inline void smp_stop_cpu(void)
{
u16 pcpu = stap();
for (;;) {
__pcpu_sigp(pcpu, SIGP_STOP, 0, NULL);
cpu_relax();
}
}
/* Return thread 0 CPU number as base CPU */
static inline int smp_get_base_cpu(int cpu)
{
return cpu - (cpu % (smp_cpu_mtid + 1));
}
static inline void smp_cpus_done(unsigned int max_cpus)
{
}
extern int smp_rescan_cpus(bool early);
extern void __noreturn cpu_die(void);
extern void __cpu_die(unsigned int cpu);
extern int __cpu_disable(void);
extern void schedule_mcck_handler(void);
void notrace smp_yield_cpu(int cpu);
#endif /* __ASM_SMP_H */
Annotation
- Immediate include surface: `asm/processor.h`, `asm/lowcore.h`, `asm/machine.h`, `asm/sigp.h`.
- Detected declarations: `function Author`, `function smp_stop_cpu`, `function smp_get_base_cpu`, `function smp_cpus_done`.
- Atlas domain: Architecture Layer / arch/s390.
- 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.