diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2005-10-16 03:17:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-10-16 03:17:33 -0400 |
commit | 688ce17b8599abc548b406c00e4d18ae0dec954f (patch) | |
tree | c64c78c72bf9582c2dcc5a3455d6fe561c6e7085 /include/linux/cpumask.h | |
parent | e6850cce8f0fcb0e16b981f13cb9c69618bbdaf1 (diff) |
[PATCH]: highest_possible_processor_id() has to be a macro
... otherwise, things like alpha and sparc64 break and break
badly. They define cpu_possible_map to something else in smp.h
*AFTER* having included cpumask.h.
If that puppy is a macro, expansion will happen at the actual
caller, when we'd already seen #define cpu_possible_map ... and we will
get the right thing used.
As an inline helper it will be tokenized before we get to that
define and that's it; no matter what we define later, it won't affect
anything. We get modules with dependency on cpu_possible_map instead
of the right symbol (phys_cpu_present_map in case of sparc64), or outright
link errors if they are built-in.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/cpumask.h')
-rw-r--r-- | include/linux/cpumask.h | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index fe9778301d07..9bdba8169b41 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -393,15 +393,13 @@ extern cpumask_t cpu_present_map; | |||
393 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) | 393 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) |
394 | 394 | ||
395 | /* Find the highest possible smp_processor_id() */ | 395 | /* Find the highest possible smp_processor_id() */ |
396 | static inline unsigned int highest_possible_processor_id(void) | 396 | #define highest_possible_processor_id() \ |
397 | { | 397 | ({ \ |
398 | unsigned int cpu, highest = 0; | 398 | unsigned int cpu, highest = 0; \ |
399 | 399 | for_each_cpu_mask(cpu, cpu_possible_map) \ | |
400 | for_each_cpu_mask(cpu, cpu_possible_map) | 400 | highest = cpu; \ |
401 | highest = cpu; | 401 | highest; \ |
402 | 402 | }) | |
403 | return highest; | ||
404 | } | ||
405 | 403 | ||
406 | 404 | ||
407 | #endif /* __LINUX_CPUMASK_H */ | 405 | #endif /* __LINUX_CPUMASK_H */ |