2 #define _ASM_X86_MACH_DEFAULT_MACH_IPI_H |
2 #define _ASM_X86_MACH_DEFAULT_MACH_IPI_H |
3 |
3 |
4 /* Avoid include hell */ |
4 /* Avoid include hell */ |
5 #define NMI_VECTOR 0x02 |
5 #define NMI_VECTOR 0x02 |
6 |
6 |
7 void send_IPI_mask_bitmask(cpumask_t mask, int vector); |
7 void send_IPI_mask_bitmask(const struct cpumask *mask, int vector); |
|
8 void send_IPI_mask_allbutself(const struct cpumask *mask, int vector); |
8 void __send_IPI_shortcut(unsigned int shortcut, int vector); |
9 void __send_IPI_shortcut(unsigned int shortcut, int vector); |
9 |
10 |
10 extern int no_broadcast; |
11 extern int no_broadcast; |
11 |
12 |
12 #ifdef CONFIG_X86_64 |
13 #ifdef CONFIG_X86_64 |
13 #include <asm/genapic.h> |
14 #include <asm/genapic.h> |
14 #define send_IPI_mask (genapic->send_IPI_mask) |
15 #define send_IPI_mask (genapic->send_IPI_mask) |
|
16 #define send_IPI_mask_allbutself (genapic->send_IPI_mask_allbutself) |
15 #else |
17 #else |
16 static inline void send_IPI_mask(cpumask_t mask, int vector) |
18 static inline void send_IPI_mask(const struct cpumask *mask, int vector) |
17 { |
19 { |
18 send_IPI_mask_bitmask(mask, vector); |
20 send_IPI_mask_bitmask(mask, vector); |
19 } |
21 } |
|
22 void send_IPI_mask_allbutself(const struct cpumask *mask, int vector); |
20 #endif |
23 #endif |
21 |
24 |
22 static inline void __local_send_IPI_allbutself(int vector) |
25 static inline void __local_send_IPI_allbutself(int vector) |
23 { |
26 { |
24 if (no_broadcast || vector == NMI_VECTOR) { |
27 if (no_broadcast || vector == NMI_VECTOR) |
25 cpumask_t mask = cpu_online_map; |
28 send_IPI_mask_allbutself(cpu_online_mask, vector); |
26 |
29 else |
27 cpu_clear(smp_processor_id(), mask); |
|
28 send_IPI_mask(mask, vector); |
|
29 } else |
|
30 __send_IPI_shortcut(APIC_DEST_ALLBUT, vector); |
30 __send_IPI_shortcut(APIC_DEST_ALLBUT, vector); |
31 } |
31 } |
32 |
32 |
33 static inline void __local_send_IPI_all(int vector) |
33 static inline void __local_send_IPI_all(int vector) |
34 { |
34 { |
35 if (no_broadcast || vector == NMI_VECTOR) |
35 if (no_broadcast || vector == NMI_VECTOR) |
36 send_IPI_mask(cpu_online_map, vector); |
36 send_IPI_mask(cpu_online_mask, vector); |
37 else |
37 else |
38 __send_IPI_shortcut(APIC_DEST_ALLINC, vector); |
38 __send_IPI_shortcut(APIC_DEST_ALLINC, vector); |
39 } |
39 } |
40 |
40 |
41 #ifdef CONFIG_X86_64 |
41 #ifdef CONFIG_X86_64 |