linux/arch/s390/include/asm/smp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 *    Copyright IBM Corp. 1999, 2012
   4 *    Author(s): Denis Joseph Barrow,
   5 *               Martin Schwidefsky <schwidefsky@de.ibm.com>,
   6 *               Heiko Carstens <heiko.carstens@de.ibm.com>,
   7 */
   8#ifndef __ASM_SMP_H
   9#define __ASM_SMP_H
  10
  11#include <asm/sigp.h>
  12#include <asm/lowcore.h>
  13
  14#define raw_smp_processor_id()  (S390_lowcore.cpu_nr)
  15
  16extern struct mutex smp_cpu_state_mutex;
  17extern unsigned int smp_cpu_mt_shift;
  18extern unsigned int smp_cpu_mtid;
  19extern __vector128 __initdata boot_cpu_vector_save_area[__NUM_VXRS];
  20
  21extern int __cpu_up(unsigned int cpu, struct task_struct *tidle);
  22
  23extern void arch_send_call_function_single_ipi(int cpu);
  24extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
  25
  26extern void smp_call_online_cpu(void (*func)(void *), void *);
  27extern void smp_call_ipl_cpu(void (*func)(void *), void *);
  28extern void smp_emergency_stop(void);
  29
  30extern int smp_find_processor_id(u16 address);
  31extern int smp_store_status(int cpu);
  32extern void smp_save_dump_cpus(void);
  33extern int smp_vcpu_scheduled(int cpu);
  34extern void smp_yield_cpu(int cpu);
  35extern void smp_cpu_set_polarization(int cpu, int val);
  36extern int smp_cpu_get_polarization(int cpu);
  37extern void smp_fill_possible_mask(void);
  38extern void smp_detect_cpus(void);
  39
  40static inline void smp_stop_cpu(void)
  41{
  42        u16 pcpu = stap();
  43
  44        for (;;) {
  45                __pcpu_sigp(pcpu, SIGP_STOP, 0, NULL);
  46                cpu_relax();
  47        }
  48}
  49
  50/* Return thread 0 CPU number as base CPU */
  51static inline int smp_get_base_cpu(int cpu)
  52{
  53        return cpu - (cpu % (smp_cpu_mtid + 1));
  54}
  55
  56extern int smp_rescan_cpus(void);
  57extern void __noreturn cpu_die(void);
  58extern void __cpu_die(unsigned int cpu);
  59extern int __cpu_disable(void);
  60
  61#endif /* __ASM_SMP_H */
  62