Commit | Line | Data |
---|---|---|
05e4d316 PA |
1 | #ifndef _ASM_X86_MACH_DEFAULT_MACH_IPI_H |
2 | #define _ASM_X86_MACH_DEFAULT_MACH_IPI_H | |
1da177e4 | 3 | |
e77deacb KO |
4 | /* Avoid include hell */ |
5 | #define NMI_VECTOR 0x02 | |
6 | ||
dac5f412 IM |
7 | void default_send_IPI_mask_bitmask(const struct cpumask *mask, int vector); |
8 | void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector); | |
9 | void __default_send_IPI_shortcut(unsigned int shortcut, int vector); | |
1da177e4 | 10 | |
67664c8f AR |
11 | extern int no_broadcast; |
12 | ||
5af5573e GC |
13 | #ifdef CONFIG_X86_64 |
14 | #include <asm/genapic.h> | |
5af5573e | 15 | #else |
dac5f412 | 16 | static inline void default_send_IPI_mask(const struct cpumask *mask, int vector) |
1da177e4 | 17 | { |
dac5f412 | 18 | default_send_IPI_mask_bitmask(mask, vector); |
1da177e4 | 19 | } |
dac5f412 | 20 | void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector); |
5af5573e | 21 | #endif |
1da177e4 | 22 | |
dac5f412 | 23 | static inline void __default_local_send_IPI_allbutself(int vector) |
67664c8f | 24 | { |
e7986739 | 25 | if (no_broadcast || vector == NMI_VECTOR) |
dac5f412 | 26 | apic->send_IPI_mask_allbutself(cpu_online_mask, vector); |
e7986739 | 27 | else |
dac5f412 | 28 | __default_send_IPI_shortcut(APIC_DEST_ALLBUT, vector); |
67664c8f AR |
29 | } |
30 | ||
dac5f412 | 31 | static inline void __default_local_send_IPI_all(int vector) |
67664c8f | 32 | { |
e77deacb | 33 | if (no_broadcast || vector == NMI_VECTOR) |
dac5f412 | 34 | apic->send_IPI_mask(cpu_online_mask, vector); |
67664c8f | 35 | else |
dac5f412 | 36 | __default_send_IPI_shortcut(APIC_DEST_ALLINC, vector); |
67664c8f AR |
37 | } |
38 | ||
dac5f412 IM |
39 | #ifdef CONFIG_X86_32 |
40 | static inline void default_send_IPI_allbutself(int vector) | |
1da177e4 LT |
41 | { |
42 | /* | |
43 | * if there are no other CPUs in the system then we get an APIC send | |
44 | * error if we try to broadcast, thus avoid sending IPIs in this case. | |
45 | */ | |
46 | if (!(num_online_cpus() > 1)) | |
47 | return; | |
48 | ||
dac5f412 | 49 | __default_local_send_IPI_allbutself(vector); |
1da177e4 LT |
50 | } |
51 | ||
dac5f412 | 52 | static inline void default_send_IPI_all(int vector) |
1da177e4 | 53 | { |
dac5f412 | 54 | __default_local_send_IPI_all(vector); |
1da177e4 | 55 | } |
5af5573e | 56 | #endif |
1da177e4 | 57 | |
05e4d316 | 58 | #endif /* _ASM_X86_MACH_DEFAULT_MACH_IPI_H */ |