ipi.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <linux/cpumask.h>
  2. #include <linux/interrupt.h>
  3. #include <linux/init.h>
  4. #include <linux/mm.h>
  5. #include <linux/delay.h>
  6. #include <linux/spinlock.h>
  7. #include <linux/kernel_stat.h>
  8. #include <linux/mc146818rtc.h>
  9. #include <linux/cache.h>
  10. #include <linux/cpu.h>
  11. #include <linux/module.h>
  12. #include <asm/smp.h>
  13. #include <asm/mtrr.h>
  14. #include <asm/tlbflush.h>
  15. #include <asm/mmu_context.h>
  16. #include <asm/apic.h>
  17. #include <asm/proto.h>
  18. #include <asm/ipi.h>
  19. #ifdef CONFIG_X86_32
  20. void default_send_IPI_self(int vector)
  21. {
  22. __default_send_IPI_shortcut(APIC_DEST_SELF, vector, apic->dest_logical);
  23. }
  24. /* must come after the send_IPI functions above for inlining */
  25. static int convert_apicid_to_cpu(int apic_id)
  26. {
  27. int i;
  28. for_each_possible_cpu(i) {
  29. if (per_cpu(x86_cpu_to_apicid, i) == apic_id)
  30. return i;
  31. }
  32. return -1;
  33. }
  34. int safe_smp_processor_id(void)
  35. {
  36. int apicid, cpuid;
  37. if (!boot_cpu_has(X86_FEATURE_APIC))
  38. return 0;
  39. apicid = hard_smp_processor_id();
  40. if (apicid == BAD_APICID)
  41. return 0;
  42. cpuid = convert_apicid_to_cpu(apicid);
  43. return cpuid >= 0 ? cpuid : 0;
  44. }
  45. #endif