mach_ipi.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #ifndef _ASM_X86_MACH_DEFAULT_MACH_IPI_H
  2. #define _ASM_X86_MACH_DEFAULT_MACH_IPI_H
  3. /* Avoid include hell */
  4. #define NMI_VECTOR 0x02
  5. void default_send_IPI_mask_bitmask(const struct cpumask *mask, int vector);
  6. void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector);
  7. void __default_send_IPI_shortcut(unsigned int shortcut, int vector);
  8. extern int no_broadcast;
  9. #ifdef CONFIG_X86_64
  10. #include <asm/genapic.h>
  11. #else
  12. static inline void default_send_IPI_mask(const struct cpumask *mask, int vector)
  13. {
  14. default_send_IPI_mask_bitmask(mask, vector);
  15. }
  16. void default_send_IPI_mask_allbutself(const struct cpumask *mask, int vector);
  17. #endif
  18. static inline void __default_local_send_IPI_allbutself(int vector)
  19. {
  20. if (no_broadcast || vector == NMI_VECTOR)
  21. apic->send_IPI_mask_allbutself(cpu_online_mask, vector);
  22. else
  23. __default_send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
  24. }
  25. static inline void __default_local_send_IPI_all(int vector)
  26. {
  27. if (no_broadcast || vector == NMI_VECTOR)
  28. apic->send_IPI_mask(cpu_online_mask, vector);
  29. else
  30. __default_send_IPI_shortcut(APIC_DEST_ALLINC, vector);
  31. }
  32. #ifdef CONFIG_X86_32
  33. static inline void default_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. __default_local_send_IPI_allbutself(vector);
  42. }
  43. static inline void default_send_IPI_all(int vector)
  44. {
  45. __default_local_send_IPI_all(vector);
  46. }
  47. #endif
  48. #endif /* _ASM_X86_MACH_DEFAULT_MACH_IPI_H */