Skip to content
  • Eric Dumazet's avatar
    [PATCH] net: remove superfluous call to synchronize_net() · 573636cb
    Eric Dumazet authored
    
    
    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: default avatarEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    573636cb