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#include <asm/processor.h>
  14
  15#define raw_smp_processor_id()  (S390_lowcore.cpu_nr)
  16
  17extern struct mutex smp_cpu_state_mutex;
  18extern unsigned int smp_cpu_mt_shift;
  19extern unsigned int smp_cpu_mtid;
  20extern __vector128 __initdata boot_cpu_vector_save_area[__NUM_VXRS];
  21extern cpumask_t cpu_setup_mask;
  22
  23extern int __cpu_up(unsigned int cpu, struct task_struct *tidle);
  24
  25extern void arch_send_call_function_single_ipi(int cpu);
  26extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
  27
  28extern void smp_call_online_cpu(void (*func)(void *), void *);
  29extern void smp_call_ipl_cpu(void (*func)(void *), void *);
  30extern void smp_emergency_stop(void);
  31
  32extern int smp_find_processor_id(u16 address);
  33extern int smp_store_status(int cpu);
  34extern void smp_save_dump_cpus(void);
  35extern void smp_yield_cpu(int cpu);
  36extern void smp_cpu_set_polarization(int cpu, int val);
  37extern int smp_cpu_get_polarization(int cpu);
  38extern int smp_cpu_get_cpu_address(int cpu);
  39extern void smp_fill_possible_mask(void);
  40extern void smp_detect_cpus(void);
  41
  42static inline void smp_stop_cpu(void)
  43{
  44        u16 pcpu = stap();
  45
  46        for (;;) {
  47                __pcpu_sigp(pcpu, SIGP_STOP, 0, NULL);
  48                cpu_relax();
  49        }
  50}
  51
  52/* Return thread 0 CPU number as base CPU */
  53static inline int smp_get_base_cpu(int cpu)
  54{
  55        return cpu - (cpu % (smp_cpu_mtid + 1));
  56}
  57
  58static inline void smp_cpus_done(unsigned int max_cpus)
  59{
  60}
  61
  62extern int smp_rescan_cpus(void);
  63extern void __noreturn cpu_die(void);
  64extern void __cpu_die(unsigned int cpu);
  65extern int __cpu_disable(void);
  66extern void schedule_mcck_handler(void);
  67void notrace smp_yield_cpu(int cpu);
  68
  69#endif /* __ASM_SMP_H */
  70