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
393393 #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
394394
395395 /* Find the highest possible smp_processor_id() */
396−static inline unsigned int highest_possible_processor_id(void)
397−{
398− unsigned int cpu, highest = 0;
399−
400− for_each_cpu_mask(cpu, cpu_possible_map)
401− highest = cpu;
402−
403− return highest;
404−}
396+#define highest_possible_processor_id() \
397+({ \
398+ unsigned int cpu, highest = 0; \
399+ for_each_cpu_mask(cpu, cpu_possible_map) \
400+ highest = cpu; \
401+ highest; \
402+})
405403
406404
407405 #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