diff options
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index da44fabf4dc5..2dc6dbb28467 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -205,21 +205,27 @@ __u8 ip_tos2prio[16] = { | |||
205 | struct rt_hash_bucket { | 205 | struct rt_hash_bucket { |
206 | struct rtable *chain; | 206 | struct rtable *chain; |
207 | }; | 207 | }; |
208 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | 208 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || \ |
209 | defined(CONFIG_PROVE_LOCKING) | ||
209 | /* | 210 | /* |
210 | * Instead of using one spinlock for each rt_hash_bucket, we use a table of spinlocks | 211 | * Instead of using one spinlock for each rt_hash_bucket, we use a table of spinlocks |
211 | * The size of this table is a power of two and depends on the number of CPUS. | 212 | * The size of this table is a power of two and depends on the number of CPUS. |
213 | * (on lockdep we have a quite big spinlock_t, so keep the size down there) | ||
212 | */ | 214 | */ |
213 | #if NR_CPUS >= 32 | 215 | #ifdef CONFIG_LOCKDEP |
214 | #define RT_HASH_LOCK_SZ 4096 | 216 | # define RT_HASH_LOCK_SZ 256 |
215 | #elif NR_CPUS >= 16 | ||
216 | #define RT_HASH_LOCK_SZ 2048 | ||
217 | #elif NR_CPUS >= 8 | ||
218 | #define RT_HASH_LOCK_SZ 1024 | ||
219 | #elif NR_CPUS >= 4 | ||
220 | #define RT_HASH_LOCK_SZ 512 | ||
221 | #else | 217 | #else |
222 | #define RT_HASH_LOCK_SZ 256 | 218 | # if NR_CPUS >= 32 |
219 | # define RT_HASH_LOCK_SZ 4096 | ||
220 | # elif NR_CPUS >= 16 | ||
221 | # define RT_HASH_LOCK_SZ 2048 | ||
222 | # elif NR_CPUS >= 8 | ||
223 | # define RT_HASH_LOCK_SZ 1024 | ||
224 | # elif NR_CPUS >= 4 | ||
225 | # define RT_HASH_LOCK_SZ 512 | ||
226 | # else | ||
227 | # define RT_HASH_LOCK_SZ 256 | ||
228 | # endif | ||
223 | #endif | 229 | #endif |
224 | 230 | ||
225 | static spinlock_t *rt_hash_locks; | 231 | static spinlock_t *rt_hash_locks; |