x86, apic: untangle the send_IPI_*() jungle
[linux-2.6-block.git] / arch / x86 / include / asm / mach-default / mach_ipi.h
CommitLineData
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
7void default_send_IPI_mask_bitmask(const struct cpumask *mask, int vector);
8void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector);
9void __default_send_IPI_shortcut(unsigned int shortcut, int vector);
1da177e4 10
67664c8f
AR
11extern int no_broadcast;
12
5af5573e
GC
13#ifdef CONFIG_X86_64
14#include <asm/genapic.h>
5af5573e 15#else
dac5f412 16static 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 20void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector);
5af5573e 21#endif
1da177e4 22
dac5f412 23static 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 31static 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
40static 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 52static 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 */