mach_ipi.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef __ASM_MACH_IPI_H
  2. #define __ASM_MACH_IPI_H
  3. void send_IPI_mask_bitmask(cpumask_t mask, int vector);
  4. void __send_IPI_shortcut(unsigned int shortcut, int vector);
  5. extern int no_broadcast;
  6. static inline void send_IPI_mask(cpumask_t mask, int vector)
  7. {
  8. send_IPI_mask_bitmask(mask, vector);
  9. }
  10. static inline void __local_send_IPI_allbutself(int vector)
  11. {
  12. if (no_broadcast) {
  13. cpumask_t mask = cpu_online_map;
  14. cpu_clear(smp_processor_id(), mask);
  15. send_IPI_mask(mask, vector);
  16. } else
  17. __send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
  18. }
  19. static inline void __local_send_IPI_all(int vector)
  20. {
  21. if (no_broadcast)
  22. send_IPI_mask(cpu_online_map, vector);
  23. else
  24. __send_IPI_shortcut(APIC_DEST_ALLINC, vector);
  25. }
  26. static inline void send_IPI_allbutself(int vector)
  27. {
  28. /*
  29. * if there are no other CPUs in the system then we get an APIC send
  30. * error if we try to broadcast, thus avoid sending IPIs in this case.
  31. */
  32. if (!(num_online_cpus() > 1))
  33. return;
  34. __local_send_IPI_allbutself(vector);
  35. return;
  36. }
  37. static inline void send_IPI_all(int vector)
  38. {
  39. __local_send_IPI_all(vector);
  40. }
  41. #endif /* __ASM_MACH_IPI_H */