diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/topology.h | 14 | ||||
| -rw-r--r-- | include/asm-m32r/smp.h | 2 | ||||
| -rw-r--r-- | include/linux/clockchips.h | 4 | ||||
| -rw-r--r-- | include/linux/cpumask.h | 105 | ||||
| -rw-r--r-- | include/linux/interrupt.h | 4 | ||||
| -rw-r--r-- | include/linux/irq.h | 3 | ||||
| -rw-r--r-- | include/linux/smp.h | 3 |
7 files changed, 93 insertions, 42 deletions
diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h index 54bbf6e04ee8..0e9e2bc0ee96 100644 --- a/include/asm-generic/topology.h +++ b/include/asm-generic/topology.h | |||
| @@ -40,6 +40,9 @@ | |||
| 40 | #ifndef node_to_cpumask | 40 | #ifndef node_to_cpumask |
| 41 | #define node_to_cpumask(node) ((void)node, cpu_online_map) | 41 | #define node_to_cpumask(node) ((void)node, cpu_online_map) |
| 42 | #endif | 42 | #endif |
| 43 | #ifndef cpumask_of_node | ||
| 44 | #define cpumask_of_node(node) ((void)node, cpu_online_mask) | ||
| 45 | #endif | ||
| 43 | #ifndef node_to_first_cpu | 46 | #ifndef node_to_first_cpu |
| 44 | #define node_to_first_cpu(node) ((void)(node),0) | 47 | #define node_to_first_cpu(node) ((void)(node),0) |
| 45 | #endif | 48 | #endif |
| @@ -54,9 +57,18 @@ | |||
| 54 | ) | 57 | ) |
| 55 | #endif | 58 | #endif |
| 56 | 59 | ||
| 60 | #ifndef cpumask_of_pcibus | ||
| 61 | #define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \ | ||
| 62 | cpu_all_mask : \ | ||
| 63 | cpumask_of_node(pcibus_to_node(bus))) | ||
| 64 | #endif | ||
| 65 | |||
| 57 | #endif /* CONFIG_NUMA */ | 66 | #endif /* CONFIG_NUMA */ |
| 58 | 67 | ||
| 59 | /* returns pointer to cpumask for specified node */ | 68 | /* |
| 69 | * returns pointer to cpumask for specified node | ||
| 70 | * Deprecated: use "const struct cpumask *mask = cpumask_of_node(node)" | ||
| 71 | */ | ||
| 60 | #ifndef node_to_cpumask_ptr | 72 | #ifndef node_to_cpumask_ptr |
| 61 | 73 | ||
| 62 | #define node_to_cpumask_ptr(v, node) \ | 74 | #define node_to_cpumask_ptr(v, node) \ |
diff --git a/include/asm-m32r/smp.h b/include/asm-m32r/smp.h index c5dd66916692..b96a6d2ffbc3 100644 --- a/include/asm-m32r/smp.h +++ b/include/asm-m32r/smp.h | |||
| @@ -63,8 +63,6 @@ extern volatile int cpu_2_physid[NR_CPUS]; | |||
| 63 | #define raw_smp_processor_id() (current_thread_info()->cpu) | 63 | #define raw_smp_processor_id() (current_thread_info()->cpu) |
| 64 | 64 | ||
| 65 | extern cpumask_t cpu_callout_map; | 65 | extern cpumask_t cpu_callout_map; |
| 66 | extern cpumask_t cpu_possible_map; | ||
| 67 | extern cpumask_t cpu_present_map; | ||
| 68 | 66 | ||
| 69 | static __inline__ int hard_smp_processor_id(void) | 67 | static __inline__ int hard_smp_processor_id(void) |
| 70 | { | 68 | { |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index ed3a5d473e52..cea153697ec7 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -82,13 +82,13 @@ struct clock_event_device { | |||
| 82 | int shift; | 82 | int shift; |
| 83 | int rating; | 83 | int rating; |
| 84 | int irq; | 84 | int irq; |
| 85 | cpumask_t cpumask; | 85 | const struct cpumask *cpumask; |
| 86 | int (*set_next_event)(unsigned long evt, | 86 | int (*set_next_event)(unsigned long evt, |
| 87 | struct clock_event_device *); | 87 | struct clock_event_device *); |
| 88 | void (*set_mode)(enum clock_event_mode mode, | 88 | void (*set_mode)(enum clock_event_mode mode, |
| 89 | struct clock_event_device *); | 89 | struct clock_event_device *); |
| 90 | void (*event_handler)(struct clock_event_device *); | 90 | void (*event_handler)(struct clock_event_device *); |
| 91 | void (*broadcast)(cpumask_t mask); | 91 | void (*broadcast)(const struct cpumask *mask); |
| 92 | struct list_head list; | 92 | struct list_head list; |
| 93 | enum clock_event_mode mode; | 93 | enum clock_event_mode mode; |
| 94 | ktime_t next_event; | 94 | ktime_t next_event; |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 21e1dd43e52a..b5ad19a6f43f 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -339,36 +339,6 @@ extern cpumask_t cpu_mask_all; | |||
| 339 | #endif | 339 | #endif |
| 340 | #define CPUMASK_PTR(v, m) cpumask_t *v = &(m->v) | 340 | #define CPUMASK_PTR(v, m) cpumask_t *v = &(m->v) |
| 341 | 341 | ||
| 342 | #define cpumask_scnprintf(buf, len, src) \ | ||
| 343 | __cpumask_scnprintf((buf), (len), &(src), NR_CPUS) | ||
| 344 | static inline int __cpumask_scnprintf(char *buf, int len, | ||
| 345 | const cpumask_t *srcp, int nbits) | ||
| 346 | { | ||
| 347 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | ||
| 348 | } | ||
| 349 | |||
| 350 | #define cpumask_parse_user(ubuf, ulen, dst) \ | ||
| 351 | __cpumask_parse_user((ubuf), (ulen), &(dst), NR_CPUS) | ||
| 352 | static inline int __cpumask_parse_user(const char __user *buf, int len, | ||
| 353 | cpumask_t *dstp, int nbits) | ||
| 354 | { | ||
| 355 | return bitmap_parse_user(buf, len, dstp->bits, nbits); | ||
| 356 | } | ||
| 357 | |||
| 358 | #define cpulist_scnprintf(buf, len, src) \ | ||
| 359 | __cpulist_scnprintf((buf), (len), &(src), NR_CPUS) | ||
| 360 | static inline int __cpulist_scnprintf(char *buf, int len, | ||
| 361 | const cpumask_t *srcp, int nbits) | ||
| 362 | { | ||
| 363 | return bitmap_scnlistprintf(buf, len, srcp->bits, nbits); | ||
| 364 | } | ||
| 365 | |||
| 366 | #define cpulist_parse(buf, dst) __cpulist_parse((buf), &(dst), NR_CPUS) | ||
| 367 | static inline int __cpulist_parse(const char *buf, cpumask_t *dstp, int nbits) | ||
| 368 | { | ||
| 369 | return bitmap_parselist(buf, dstp->bits, nbits); | ||
| 370 | } | ||
| 371 | |||
| 372 | #define cpu_remap(oldbit, old, new) \ | 342 | #define cpu_remap(oldbit, old, new) \ |
| 373 | __cpu_remap((oldbit), &(old), &(new), NR_CPUS) | 343 | __cpu_remap((oldbit), &(old), &(new), NR_CPUS) |
| 374 | static inline int __cpu_remap(int oldbit, | 344 | static inline int __cpu_remap(int oldbit, |
| @@ -540,9 +510,6 @@ extern cpumask_t cpu_active_map; | |||
| 540 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | 510 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ |
| 541 | } | 511 | } |
| 542 | 512 | ||
| 543 | /* This produces more efficient code. */ | ||
| 544 | #define nr_cpumask_bits NR_CPUS | ||
| 545 | |||
| 546 | #else /* NR_CPUS > BITS_PER_LONG */ | 513 | #else /* NR_CPUS > BITS_PER_LONG */ |
| 547 | 514 | ||
| 548 | #define CPU_BITS_ALL \ | 515 | #define CPU_BITS_ALL \ |
| @@ -550,9 +517,15 @@ extern cpumask_t cpu_active_map; | |||
| 550 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | 517 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ |
| 551 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | 518 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ |
| 552 | } | 519 | } |
| 520 | #endif /* NR_CPUS > BITS_PER_LONG */ | ||
| 553 | 521 | ||
| 522 | #ifdef CONFIG_CPUMASK_OFFSTACK | ||
| 523 | /* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, | ||
| 524 | * not all bits may be allocated. */ | ||
| 554 | #define nr_cpumask_bits nr_cpu_ids | 525 | #define nr_cpumask_bits nr_cpu_ids |
| 555 | #endif /* NR_CPUS > BITS_PER_LONG */ | 526 | #else |
| 527 | #define nr_cpumask_bits NR_CPUS | ||
| 528 | #endif | ||
| 556 | 529 | ||
| 557 | /* verify cpu argument to cpumask_* operators */ | 530 | /* verify cpu argument to cpumask_* operators */ |
| 558 | static inline unsigned int cpumask_check(unsigned int cpu) | 531 | static inline unsigned int cpumask_check(unsigned int cpu) |
| @@ -946,6 +919,63 @@ static inline void cpumask_copy(struct cpumask *dstp, | |||
| 946 | #define cpumask_of(cpu) (get_cpu_mask(cpu)) | 919 | #define cpumask_of(cpu) (get_cpu_mask(cpu)) |
| 947 | 920 | ||
| 948 | /** | 921 | /** |
| 922 | * cpumask_scnprintf - print a cpumask into a string as comma-separated hex | ||
| 923 | * @buf: the buffer to sprintf into | ||
| 924 | * @len: the length of the buffer | ||
| 925 | * @srcp: the cpumask to print | ||
| 926 | * | ||
| 927 | * If len is zero, returns zero. Otherwise returns the length of the | ||
| 928 | * (nul-terminated) @buf string. | ||
| 929 | */ | ||
| 930 | static inline int cpumask_scnprintf(char *buf, int len, | ||
| 931 | const struct cpumask *srcp) | ||
| 932 | { | ||
| 933 | return bitmap_scnprintf(buf, len, srcp->bits, nr_cpumask_bits); | ||
| 934 | } | ||
| 935 | |||
| 936 | /** | ||
| 937 | * cpumask_parse_user - extract a cpumask from a user string | ||
| 938 | * @buf: the buffer to extract from | ||
| 939 | * @len: the length of the buffer | ||
| 940 | * @dstp: the cpumask to set. | ||
| 941 | * | ||
| 942 | * Returns -errno, or 0 for success. | ||
| 943 | */ | ||
| 944 | static inline int cpumask_parse_user(const char __user *buf, int len, | ||
| 945 | struct cpumask *dstp) | ||
| 946 | { | ||
| 947 | return bitmap_parse_user(buf, len, dstp->bits, nr_cpumask_bits); | ||
| 948 | } | ||
| 949 | |||
| 950 | /** | ||
| 951 | * cpulist_scnprintf - print a cpumask into a string as comma-separated list | ||
| 952 | * @buf: the buffer to sprintf into | ||
| 953 | * @len: the length of the buffer | ||
| 954 | * @srcp: the cpumask to print | ||
| 955 | * | ||
| 956 | * If len is zero, returns zero. Otherwise returns the length of the | ||
| 957 | * (nul-terminated) @buf string. | ||
| 958 | */ | ||
| 959 | static inline int cpulist_scnprintf(char *buf, int len, | ||
| 960 | const struct cpumask *srcp) | ||
| 961 | { | ||
| 962 | return bitmap_scnlistprintf(buf, len, srcp->bits, nr_cpumask_bits); | ||
| 963 | } | ||
| 964 | |||
| 965 | /** | ||
| 966 | * cpulist_parse_user - extract a cpumask from a user string of ranges | ||
| 967 | * @buf: the buffer to extract from | ||
| 968 | * @len: the length of the buffer | ||
| 969 | * @dstp: the cpumask to set. | ||
| 970 | * | ||
| 971 | * Returns -errno, or 0 for success. | ||
| 972 | */ | ||
| 973 | static inline int cpulist_parse(const char *buf, struct cpumask *dstp) | ||
| 974 | { | ||
| 975 | return bitmap_parselist(buf, dstp->bits, nr_cpumask_bits); | ||
| 976 | } | ||
| 977 | |||
| 978 | /** | ||
| 949 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | 979 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * |
| 950 | * @bitmap: the bitmap | 980 | * @bitmap: the bitmap |
| 951 | * | 981 | * |
| @@ -995,6 +1025,7 @@ static inline size_t cpumask_size(void) | |||
| 995 | #ifdef CONFIG_CPUMASK_OFFSTACK | 1025 | #ifdef CONFIG_CPUMASK_OFFSTACK |
| 996 | typedef struct cpumask *cpumask_var_t; | 1026 | typedef struct cpumask *cpumask_var_t; |
| 997 | 1027 | ||
| 1028 | bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node); | ||
| 998 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); | 1029 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); |
| 999 | void alloc_bootmem_cpumask_var(cpumask_var_t *mask); | 1030 | void alloc_bootmem_cpumask_var(cpumask_var_t *mask); |
| 1000 | void free_cpumask_var(cpumask_var_t mask); | 1031 | void free_cpumask_var(cpumask_var_t mask); |
| @@ -1008,6 +1039,12 @@ static inline bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) | |||
| 1008 | return true; | 1039 | return true; |
| 1009 | } | 1040 | } |
| 1010 | 1041 | ||
| 1042 | static inline bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, | ||
| 1043 | int node) | ||
| 1044 | { | ||
| 1045 | return true; | ||
| 1046 | } | ||
| 1047 | |||
| 1011 | static inline void alloc_bootmem_cpumask_var(cpumask_var_t *mask) | 1048 | static inline void alloc_bootmem_cpumask_var(cpumask_var_t *mask) |
| 1012 | { | 1049 | { |
| 1013 | } | 1050 | } |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index f58a0cf8929a..48e63934fabe 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -109,13 +109,13 @@ extern void enable_irq(unsigned int irq); | |||
| 109 | 109 | ||
| 110 | extern cpumask_t irq_default_affinity; | 110 | extern cpumask_t irq_default_affinity; |
| 111 | 111 | ||
| 112 | extern int irq_set_affinity(unsigned int irq, cpumask_t cpumask); | 112 | extern int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask); |
| 113 | extern int irq_can_set_affinity(unsigned int irq); | 113 | extern int irq_can_set_affinity(unsigned int irq); |
| 114 | extern int irq_select_affinity(unsigned int irq); | 114 | extern int irq_select_affinity(unsigned int irq); |
| 115 | 115 | ||
| 116 | #else /* CONFIG_SMP */ | 116 | #else /* CONFIG_SMP */ |
| 117 | 117 | ||
| 118 | static inline int irq_set_affinity(unsigned int irq, cpumask_t cpumask) | 118 | static inline int irq_set_affinity(unsigned int irq, const struct cpumask *m) |
| 119 | { | 119 | { |
| 120 | return -EINVAL; | 120 | return -EINVAL; |
| 121 | } | 121 | } |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 3dddfa703ebd..ab70fd604d3a 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -113,7 +113,8 @@ struct irq_chip { | |||
| 113 | void (*eoi)(unsigned int irq); | 113 | void (*eoi)(unsigned int irq); |
| 114 | 114 | ||
| 115 | void (*end)(unsigned int irq); | 115 | void (*end)(unsigned int irq); |
| 116 | void (*set_affinity)(unsigned int irq, cpumask_t dest); | 116 | void (*set_affinity)(unsigned int irq, |
| 117 | const struct cpumask *dest); | ||
| 117 | int (*retrigger)(unsigned int irq); | 118 | int (*retrigger)(unsigned int irq); |
| 118 | int (*set_type)(unsigned int irq, unsigned int flow_type); | 119 | int (*set_type)(unsigned int irq, unsigned int flow_type); |
| 119 | int (*set_wake)(unsigned int irq, unsigned int on); | 120 | int (*set_wake)(unsigned int irq, unsigned int on); |
diff --git a/include/linux/smp.h b/include/linux/smp.h index 6e7ba16ff454..2f85f3b04bc4 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
| @@ -21,6 +21,9 @@ struct call_single_data { | |||
| 21 | u16 priv; | 21 | u16 priv; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | /* total number of cpus in this system (may exceed NR_CPUS) */ | ||
| 25 | extern unsigned int total_cpus; | ||
| 26 | |||
| 24 | #ifdef CONFIG_SMP | 27 | #ifdef CONFIG_SMP |
| 25 | 28 | ||
| 26 | #include <linux/preempt.h> | 29 | #include <linux/preempt.h> |
