diff options
Diffstat (limited to 'arch/s390/include/asm/smp.h')
| -rw-r--r-- | arch/s390/include/asm/smp.h | 17 | 
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h index b64f15c3b4c..4f1307962a9 100644 --- a/arch/s390/include/asm/smp.h +++ b/arch/s390/include/asm/smp.h @@ -7,6 +7,8 @@  #ifndef __ASM_SMP_H  #define __ASM_SMP_H +#include <asm/sigp.h> +  #ifdef CONFIG_SMP  #include <asm/lowcore.h> @@ -14,7 +16,6 @@  #define raw_smp_processor_id()	(S390_lowcore.cpu_nr)  extern struct mutex smp_cpu_state_mutex; -extern struct save_area *zfcpdump_save_areas[NR_CPUS + 1];  extern int __cpu_up(unsigned int cpu, struct task_struct *tidle); @@ -29,9 +30,9 @@ extern int smp_store_status(int cpu);  extern int smp_vcpu_scheduled(int cpu);  extern void smp_yield_cpu(int cpu);  extern void smp_yield(void); -extern void smp_stop_cpu(void);  extern void smp_cpu_set_polarization(int cpu, int val);  extern int smp_cpu_get_polarization(int cpu); +extern void smp_fill_possible_mask(void);  #else /* CONFIG_SMP */ @@ -50,10 +51,20 @@ static inline int smp_store_status(int cpu) { return 0; }  static inline int smp_vcpu_scheduled(int cpu) { return 1; }  static inline void smp_yield_cpu(int cpu) { }  static inline void smp_yield(void) { } -static inline void smp_stop_cpu(void) { } +static inline void smp_fill_possible_mask(void) { }  #endif /* CONFIG_SMP */ +static inline void smp_stop_cpu(void) +{ +	u16 pcpu = stap(); + +	for (;;) { +		__pcpu_sigp(pcpu, SIGP_STOP, 0, NULL); +		cpu_relax(); +	} +} +  #ifdef CONFIG_HOTPLUG_CPU  extern int smp_rescan_cpus(void);  extern void __noreturn cpu_die(void);  | 
