History

[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.

Al Viro committed 21 years ago

Commit 688ce171 parent e6850cc1 file · +7 −9Browse files

Unified · Split

include/linux/cpumask.h+7−9
@@ -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() */
396static 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 */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t