X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fcore%2Fflow.c;fp=net%2Fcore%2Fflow.c;h=c4f25385029f86ae4c0bcdd7d3fe0d3b151727df;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=2191af5f26acbfe61f6e1633de7d40cfbd83c27c;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/net/core/flow.c b/net/core/flow.c index 2191af5f2..c4f253850 100644 --- a/net/core/flow.c +++ b/net/core/flow.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -79,7 +78,7 @@ static void flow_cache_new_hashrnd(unsigned long arg) { int i; - for_each_possible_cpu(i) + for_each_cpu(i) flow_hash_rnd_recalc(i) = 1; flow_hash_rnd_timer.expires = jiffies + FLOW_HASH_RND_PERIOD; @@ -288,11 +287,11 @@ static void flow_cache_flush_per_cpu(void *data) void flow_cache_flush(void) { struct flow_flush_info info; - static DEFINE_MUTEX(flow_flush_sem); + static DECLARE_MUTEX(flow_flush_sem); /* Don't want cpus going down or up during this. */ lock_cpu_hotplug(); - mutex_lock(&flow_flush_sem); + down(&flow_flush_sem); atomic_set(&info.cpuleft, num_online_cpus()); init_completion(&info.completion); @@ -302,7 +301,7 @@ void flow_cache_flush(void) local_bh_enable(); wait_for_completion(&info.completion); - mutex_unlock(&flow_flush_sem); + up(&flow_flush_sem); unlock_cpu_hotplug(); } @@ -318,10 +317,12 @@ static void __devinit flow_cache_cpu_prepare(int cpu) /* NOTHING */; flow_table(cpu) = (struct flow_cache_entry **) - __get_free_pages(GFP_KERNEL|__GFP_ZERO, order); + __get_free_pages(GFP_KERNEL, order); if (!flow_table(cpu)) panic("NET: failed to allocate flow cache order %lu\n", order); + memset(flow_table(cpu), 0, PAGE_SIZE << order); + flow_hash_rnd_recalc(cpu) = 1; flow_count(cpu) = 0; @@ -361,7 +362,7 @@ static int __init flow_cache_init(void) flow_hash_rnd_timer.expires = jiffies + FLOW_HASH_RND_PERIOD; add_timer(&flow_hash_rnd_timer); - for_each_possible_cpu(i) + for_each_cpu(i) flow_cache_cpu_prepare(i); hotcpu_notifier(flow_cache_cpu, 0);