Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
c20c89a6 HC |
2 | * Copyright IBM Corp. 1999,2009 |
3 | * Author(s): Denis Joseph Barrow, | |
4 | * Martin Schwidefsky <schwidefsky@de.ibm.com>, | |
5 | * Heiko Carstens <heiko.carstens@de.ibm.com>, | |
1da177e4 LT |
6 | */ |
7 | #ifndef __ASM_SMP_H | |
8 | #define __ASM_SMP_H | |
9 | ||
c20c89a6 | 10 | #ifdef CONFIG_SMP |
1da177e4 | 11 | |
2e5061e4 | 12 | #include <asm/system.h> |
c20c89a6 | 13 | #include <asm/sigp.h> |
1da177e4 | 14 | |
2b67fc46 HC |
15 | extern void machine_restart_smp(char *); |
16 | extern void machine_halt_smp(void); | |
17 | extern void machine_power_off_smp(void); | |
18 | ||
7b468488 | 19 | #define raw_smp_processor_id() (S390_lowcore.cpu_nr) |
1da177e4 LT |
20 | |
21 | extern int __cpu_disable (void); | |
22 | extern void __cpu_die (unsigned int cpu); | |
1da177e4 LT |
23 | extern int __cpu_up (unsigned int cpu); |
24 | ||
dbd70fb4 HC |
25 | extern struct mutex smp_cpu_state_mutex; |
26 | ||
ca9fc75a | 27 | extern void arch_send_call_function_single_ipi(int cpu); |
630cd046 | 28 | extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); |
ca9fc75a | 29 | |
f64ca217 | 30 | extern struct save_area *zfcpdump_save_areas[NR_CPUS + 1]; |
c20c89a6 | 31 | |
2c2df118 HC |
32 | extern void smp_switch_to_ipl_cpu(void (*func)(void *), void *); |
33 | extern void smp_switch_to_cpu(void (*)(void *), void *, unsigned long sp, | |
34 | int from, int to); | |
1943f53c | 35 | extern void smp_restart_with_online_cpu(void); |
2c2df118 HC |
36 | extern void smp_restart_cpu(void); |
37 | ||
59b69787 GS |
38 | /* |
39 | * returns 1 if (virtual) cpu is scheduled | |
40 | * returns 0 otherwise | |
41 | */ | |
42 | static inline int smp_vcpu_scheduled(int cpu) | |
43 | { | |
44 | u32 status; | |
45 | ||
46 | switch (sigp_ps(&status, 0, cpu, sigp_sense_running)) { | |
47 | case sigp_status_stored: | |
48 | /* Check for running status */ | |
49 | if (status & 0x400) | |
50 | return 0; | |
51 | break; | |
52 | case sigp_not_operational: | |
53 | return 0; | |
54 | default: | |
55 | break; | |
56 | } | |
57 | return 1; | |
58 | } | |
59 | ||
2c2df118 HC |
60 | #else /* CONFIG_SMP */ |
61 | ||
62 | static inline void smp_switch_to_ipl_cpu(void (*func)(void *), void *data) | |
63 | { | |
64 | func(data); | |
65 | } | |
66 | ||
1943f53c MH |
67 | static inline void smp_restart_with_online_cpu(void) |
68 | { | |
69 | } | |
70 | ||
59b69787 GS |
71 | #define smp_vcpu_scheduled (1) |
72 | ||
c20c89a6 | 73 | #endif /* CONFIG_SMP */ |
1da177e4 | 74 | |
1e489518 HC |
75 | #ifdef CONFIG_HOTPLUG_CPU |
76 | extern int smp_rescan_cpus(void); | |
da7f51c1 | 77 | extern void __noreturn cpu_die(void); |
1e489518 HC |
78 | #else |
79 | static inline int smp_rescan_cpus(void) { return 0; } | |
da7f51c1 | 80 | static inline void cpu_die(void) { } |
1e489518 HC |
81 | #endif |
82 | ||
c20c89a6 | 83 | #endif /* __ASM_SMP_H */ |