diff options
-rw-r--r-- | include/linux/cpumask.h | 15 | ||||
-rw-r--r-- | lib/cpumask.c | 17 |
2 files changed, 23 insertions, 9 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 4b29e508a0b6..f770039344c5 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -396,6 +396,12 @@ extern cpumask_t cpu_present_map; | |||
396 | #define cpu_present(cpu) ((cpu) == 0) | 396 | #define cpu_present(cpu) ((cpu) == 0) |
397 | #endif | 397 | #endif |
398 | 398 | ||
399 | #ifdef CONFIG_SMP | ||
400 | int highest_possible_processor_id(void); | ||
401 | #else | ||
402 | #define highest_possible_processor_id() 0 | ||
403 | #endif | ||
404 | |||
399 | #define any_online_cpu(mask) \ | 405 | #define any_online_cpu(mask) \ |
400 | ({ \ | 406 | ({ \ |
401 | int cpu; \ | 407 | int cpu; \ |
@@ -409,14 +415,5 @@ extern cpumask_t cpu_present_map; | |||
409 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map) | 415 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map) |
410 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) | 416 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) |
411 | 417 | ||
412 | /* Find the highest possible smp_processor_id() */ | ||
413 | #define highest_possible_processor_id() \ | ||
414 | ({ \ | ||
415 | unsigned int cpu, highest = 0; \ | ||
416 | for_each_cpu_mask(cpu, cpu_possible_map) \ | ||
417 | highest = cpu; \ | ||
418 | highest; \ | ||
419 | }) | ||
420 | |||
421 | 418 | ||
422 | #endif /* __LINUX_CPUMASK_H */ | 419 | #endif /* __LINUX_CPUMASK_H */ |
diff --git a/lib/cpumask.c b/lib/cpumask.c index ba2f8543052c..ea25a034276c 100644 --- a/lib/cpumask.c +++ b/lib/cpumask.c | |||
@@ -14,3 +14,20 @@ int __next_cpu(int n, const cpumask_t *srcp) | |||
14 | return min_t(int, NR_CPUS, find_next_bit(srcp->bits, NR_CPUS, n+1)); | 14 | return min_t(int, NR_CPUS, find_next_bit(srcp->bits, NR_CPUS, n+1)); |
15 | } | 15 | } |
16 | EXPORT_SYMBOL(__next_cpu); | 16 | EXPORT_SYMBOL(__next_cpu); |
17 | |||
18 | /* | ||
19 | * Find the highest possible smp_processor_id() | ||
20 | * | ||
21 | * Note: if we're prepared to assume that cpu_possible_map never changes | ||
22 | * (reasonable) then this function should cache its return value. | ||
23 | */ | ||
24 | int highest_possible_processor_id(void) | ||
25 | { | ||
26 | unsigned int cpu; | ||
27 | unsigned highest = 0; | ||
28 | |||
29 | for_each_cpu_mask(cpu, cpu_possible_map) | ||
30 | highest = cpu; | ||
31 | return highest; | ||
32 | } | ||
33 | EXPORT_SYMBOL(highest_possible_processor_id); | ||