... 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.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -393,15 +393,13 @@ extern cpumask_t cpu_present_map; · 392 unmodified lines | |||
| 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 */ |