diff options
| author | David S. Miller <davem@davemloft.net> | 2005-10-13 17:41:23 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2005-10-13 17:41:23 -0400 |
| commit | c8923c6b852d3a97c1faad0566e38fca330375a7 (patch) | |
| tree | eb79e97c5468bba641c7a34b83514876f4902cf2 /include/linux | |
| parent | c931488cc4619eecfe68a2f046b5898fddc2f904 (diff) | |
[NETFILTER]: Fix OOPSes on machines with discontiguous cpu numbering.
Original patch by Harald Welte, with feedback from Herbert Xu
and testing by Sébastien Bernard.
EBTABLES, ARP tables, and IP/IP6 tables all assume that cpus
are numbered linearly. That is not necessarily true.
This patch fixes that up by calculating the largest possible
cpu number, and allocating enough per-cpu structure space given
that.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/cpumask.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index b15826f6e3a2..fe9778301d07 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -392,4 +392,16 @@ extern cpumask_t cpu_present_map; | |||
| 392 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map) | 392 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_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() */ | ||
| 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 | } | ||
| 405 | |||
| 406 | |||
| 395 | #endif /* __LINUX_CPUMASK_H */ | 407 | #endif /* __LINUX_CPUMASK_H */ |
