]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] net: remove superfluous call to synchronize_net()
authorEric Dumazet <dada1@cosmosbay.com>
Fri, 17 Apr 2009 11:52:48 +0000 (04:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Apr 2009 11:52:48 +0000 (04:52 -0700)
commit4998e336a9c6bbed72292c0ed65cdfa61c1841a3
treed1acf4db4b18faf23771fd71f183acad1caf6641
parent144bff9aaf31cac092b4a8fc7d0980040e862665
[PATCH] net: remove superfluous call to synchronize_net()

inet_register_protosw() function is responsible for adding a new
inet protocol into a global table (inetsw[]) that is used with RCU rules.

As soon as the store of the pointer is done, other cpus might see
this new protocol in inetsw[], so we have to make sure new protocol
is ready for use. All pending memory updates should thus be committed
to memory before setting the pointer.
This is correctly done using rcu_assign_pointer()

synchronize_net() is typically used at unregister time, after
unsetting the pointer, to make sure no other cpu is still using
the object we want to dismantle. Using it at register time
is only adding an artificial delay that could hide a real bug,
and this bug could popup if/when synchronize_rcu() can proceed
faster than now.

This saves about 13 ms on boot time on a HZ=1000 8 cpus machine  ;)
(4 calls to inet_register_protosw(), and about 3200 us per call)

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/af_inet.c