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];
  21
  22extern int __cpu_up(unsigned int cpu, struct task_struct *tidle);
  23
  24extern void arch_send_call_function_single_ipi(int cpu);
  25extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
  26
  27extern void smp_call_online_cpu(void (*func)(void *), void *);
  28extern void smp_call_ipl_cpu(void (*func)(void *), void *);
  29extern void smp_emergency_stop(void);
  30
  31extern int smp_find_processor_id(u16 address);
  32extern int smp_store_status(int cpu);
  33extern void smp_save_dump_cpus(void);
  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 int smp_cpu_get_cpu_address(int cpu);
  38extern void smp_fill_possible_mask(void);
  39extern void smp_detect_cpus(void);
  40
  41static inline void smp_stop_cpu(void)
  42{
  43        u16 pcpu = stap();
  44
  45        for (;;) {
  46                __pcpu_sigp(pcpu, SIGP_STOP, 0, NULL);
  47                cpu_relax();
  48        }
  49}
  50
  51/* Return thread 0 CPU number as base CPU */
  52static inline int smp_get_base_cpu(int cpu)
  53{
  54        return cpu - (cpu % (smp_cpu_mtid + 1));
  55}
  56
  57static inline void smp_cpus_done(unsigned int max_cpus)
  58{
  59}
  60
  61extern int smp_rescan_cpus(void);
  62extern void __noreturn cpu_die(void);
  63extern void __cpu_die(unsigned int cpu);
  64extern int __cpu_disable(void);
  65extern void schedule_mcck_handler(void);
  66void notrace smp_yield_cpu(int cpu);
  67
  68#endif /* __ASM_SMP_H */
  69