Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / asm-i386 / mach-default / mach_ipi.h
1 #ifndef __ASM_MACH_IPI_H
2 #define __ASM_MACH_IPI_H
3
4 void send_IPI_mask_bitmask(cpumask_t mask, int vector);
5 void __send_IPI_shortcut(unsigned int shortcut, int vector);
6
7 extern int no_broadcast;
8
9 static inline void send_IPI_mask(cpumask_t mask, int vector)
10 {
11         send_IPI_mask_bitmask(mask, vector);
12 }
13
14 static inline void __local_send_IPI_allbutself(int vector)
15 {
16         if (no_broadcast) {
17                 cpumask_t mask = cpu_online_map;
18
19                 cpu_clear(smp_processor_id(), mask);
20                 send_IPI_mask(mask, vector);
21         } else
22                 __send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
23 }
24
25 static inline void __local_send_IPI_all(int vector)
26 {
27         if (no_broadcast)
28                 send_IPI_mask(cpu_online_map, vector);
29         else
30                 __send_IPI_shortcut(APIC_DEST_ALLINC, vector);
31 }
32
33 static inline void send_IPI_allbutself(int vector)
34 {
35         /*
36          * if there are no other CPUs in the system then we get an APIC send 
37          * error if we try to broadcast, thus avoid sending IPIs in this case.
38          */
39         if (!(num_online_cpus() > 1))
40                 return;
41
42         __local_send_IPI_allbutself(vector);
43         return;
44 }
45
46 static inline void send_IPI_all(int vector)
47 {
48         __local_send_IPI_all(vector);
49 }
50
51 #endif /* __ASM_MACH_IPI_H */