smp.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef _ASM_X86_SMP_H_
  2. #define _ASM_X86_SMP_H_
  3. #ifndef __ASSEMBLY__
  4. #include <linux/cpumask.h>
  5. #include <linux/init.h>
  6. extern cpumask_t cpu_callout_map;
  7. extern int smp_num_siblings;
  8. extern unsigned int num_processors;
  9. struct smp_ops {
  10. void (*smp_prepare_boot_cpu)(void);
  11. void (*smp_prepare_cpus)(unsigned max_cpus);
  12. int (*cpu_up)(unsigned cpu);
  13. void (*smp_cpus_done)(unsigned max_cpus);
  14. void (*smp_send_stop)(void);
  15. void (*smp_send_reschedule)(int cpu);
  16. int (*smp_call_function_mask)(cpumask_t mask,
  17. void (*func)(void *info), void *info,
  18. int wait);
  19. };
  20. /* Globals due to paravirt */
  21. extern void set_cpu_sibling_map(int cpu);
  22. #ifdef CONFIG_SMP
  23. extern struct smp_ops smp_ops;
  24. static inline void smp_send_stop(void)
  25. {
  26. smp_ops.smp_send_stop();
  27. }
  28. static inline void smp_prepare_boot_cpu(void)
  29. {
  30. smp_ops.smp_prepare_boot_cpu();
  31. }
  32. static inline void smp_prepare_cpus(unsigned int max_cpus)
  33. {
  34. smp_ops.smp_prepare_cpus(max_cpus);
  35. }
  36. static inline void smp_cpus_done(unsigned int max_cpus)
  37. {
  38. smp_ops.smp_cpus_done(max_cpus);
  39. }
  40. static inline int __cpu_up(unsigned int cpu)
  41. {
  42. return smp_ops.cpu_up(cpu);
  43. }
  44. static inline void smp_send_reschedule(int cpu)
  45. {
  46. smp_ops.smp_send_reschedule(cpu);
  47. }
  48. static inline int smp_call_function_mask(cpumask_t mask,
  49. void (*func) (void *info), void *info,
  50. int wait)
  51. {
  52. return smp_ops.smp_call_function_mask(mask, func, info, wait);
  53. }
  54. void native_smp_prepare_boot_cpu(void);
  55. void native_smp_prepare_cpus(unsigned int max_cpus);
  56. void native_smp_cpus_done(unsigned int max_cpus);
  57. int native_cpu_up(unsigned int cpunum);
  58. extern unsigned disabled_cpus;
  59. extern void prefill_possible_map(void);
  60. #endif
  61. #ifdef CONFIG_X86_32
  62. # include "smp_32.h"
  63. #else
  64. # include "smp_64.h"
  65. #endif
  66. #ifdef CONFIG_HOTPLUG_CPU
  67. extern void cpu_exit_clear(void);
  68. extern void cpu_uninit(void);
  69. extern void remove_siblinginfo(int cpu);
  70. #endif
  71. extern void smp_alloc_memory(void);
  72. extern void lock_ipi_call_lock(void);
  73. extern void unlock_ipi_call_lock(void);
  74. #endif /* __ASSEMBLY__ */
  75. #endif