mach_ipi.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. int this_cpu = get_cpu();
  15. cpu_clear(this_cpu, mask);
  16. send_IPI_mask(mask, vector);
  17. put_cpu();
  18. } else
  19. __send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
  20. }
  21. static inline void __local_send_IPI_all(int vector)
  22. {
  23. if (no_broadcast)
  24. send_IPI_mask(cpu_online_map, vector);
  25. else
  26. __send_IPI_shortcut(APIC_DEST_ALLINC, vector);
  27. }
  28. static inline void send_IPI_allbutself(int vector)
  29. {
  30. /*
  31. * if there are no other CPUs in the system then we get an APIC send
  32. * error if we try to broadcast, thus avoid sending IPIs in this case.
  33. */
  34. if (!(num_online_cpus() > 1))
  35. return;
  36. __local_send_IPI_allbutself(vector);
  37. return;
  38. }
  39. static inline void send_IPI_all(int vector)
  40. {
  41. __local_send_IPI_all(vector);
  42. }
  43. #endif /* __ASM_MACH_IPI_H */