Commit 688ce17b authored by Al Viro's avatar Al Viro Committed by David S. Miller

[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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e6850cce
...@@ -393,15 +393,13 @@ extern cpumask_t cpu_present_map; ...@@ -393,15 +393,13 @@ extern cpumask_t cpu_present_map;
#define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
/* Find the highest possible smp_processor_id() */ /* Find the highest possible smp_processor_id() */
static inline unsigned int highest_possible_processor_id(void) #define highest_possible_processor_id() \
{ ({ \
unsigned int cpu, highest = 0; unsigned int cpu, highest = 0; \
for_each_cpu_mask(cpu, cpu_possible_map) \
for_each_cpu_mask(cpu, cpu_possible_map) highest = cpu; \
highest = cpu; highest; \
})
return highest;
}
#endif /* __LINUX_CPUMASK_H */ #endif /* __LINUX_CPUMASK_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment