smp.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General
  3.  * Public License.  See the file "COPYING" in the main directory of this
  4.  * archive for more details.
  5.  *
  6.  * Copyright (C) 2000 - 2001 by Kanoj Sarcar (kanoj@sgi.com)
  7.  * Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
  8.  */
  9. #ifndef __ASM_SMP_H
  10. #define __ASM_SMP_H
  11. #include <linux/config.h>
  12. #ifdef CONFIG_SMP
  13. #include <linux/threads.h>
  14. #include <linux/irq.h>
  15. #define smp_processor_id() (current->processor)
  16. #define PROC_CHANGE_PENALTY 20
  17. /* Map from cpu id to sequential logical cpu number.  This will only
  18.    not be idempotent when cpus failed to come on-line.  */
  19. extern int __cpu_number_map[NR_CPUS];
  20. #define cpu_number_map(cpu)  __cpu_number_map[cpu]
  21. /* The reverse map from sequential logical cpu number to cpu id.  */
  22. extern int __cpu_logical_map[NR_CPUS];
  23. #define cpu_logical_map(cpu)  __cpu_logical_map[cpu]
  24. #endif
  25. #define NO_PROC_ID (-1)
  26. #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */
  27. #define SMP_CALL_FUNCTION 0x2
  28. #if (NR_CPUS <= _MIPS_SZLONG)
  29. typedef unsigned long   cpumask_t;
  30. #define CPUMASK_CLRALL(p) (p) = 0
  31. #define CPUMASK_SETB(p, bit) (p) |= 1UL << (bit)
  32. #define CPUMASK_CLRB(p, bit) (p) &= ~(1UL << (bit))
  33. #define CPUMASK_TSTB(p, bit) ((p) & (1UL << (bit)))
  34. #elif (NR_CPUS <= 128)
  35. /*
  36.  * The foll should work till 128 cpus.
  37.  */
  38. #define CPUMASK_SIZE (NR_CPUS/_MIPS_SZLONG)
  39. #define CPUMASK_INDEX(bit) ((bit) >> 6)
  40. #define CPUMASK_SHFT(bit) ((bit) & 0x3f)
  41. typedef struct {
  42. unsigned long _bits[CPUMASK_SIZE];
  43. } cpumask_t;
  44. #define CPUMASK_CLRALL(p) (p)._bits[0] = 0, (p)._bits[1] = 0
  45. #define CPUMASK_SETB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] |= 
  46. (1UL << CPUMASK_SHFT(bit))
  47. #define CPUMASK_CLRB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] &= 
  48. ~(1UL << CPUMASK_SHFT(bit))
  49. #define CPUMASK_TSTB(p, bit) ((p)._bits[CPUMASK_INDEX(bit)] & 
  50. (1UL << CPUMASK_SHFT(bit)))
  51. #else
  52. #error cpumask macros only defined for 128p kernels
  53. #endif
  54. struct call_data_struct {
  55. void (*func)(void *);
  56. void *info;
  57. atomic_t started;
  58. atomic_t finished;
  59. int wait;
  60. };
  61. extern struct call_data_struct *call_data;
  62. extern cpumask_t cpu_online_map;
  63. #endif /* __ASM_SMP_H */