Re: is synchronize_net in inet_register_protosw necessary?

From: Paul E. McKenney
Date: Thu Jun 16 2005 - 17:09:03 EST

On Thu, Jun 16, 2005 at 10:15:02AM -0700, Paul E. McKenney wrote:
> On Tue, Jun 14, 2005 at 11:18:08PM +0900, junjie cai wrote:
> > hi all.
> > i am a newbie to linux kernel.
> > in a arm926 board i found that it took about 30ms to finish
> > the (net/ipv4/af_inet.c:898) inet_register_protosw
> > because of the synchronize_net call during profiling.
> > synchronize_net finally calls synchronize_rcu, so i think
> > this is to make the change visiable after a list_add_rcu.
> > but according to the Document/listRCU.txt it seems that
> > a list insertation does not necessarily do call_rcu etc.
> > may i have any mistakes, please kindly tell me.
> From a strict RCU viewpoint, you are quite correct. But sometimes
> the overall locking protocol (which almost always includes other things
> besides just RCU) places additional constraints on the code. My guess is
> that the networking folks needed to ensure that the new protocol is seen
> by all packets that are received after inet_register_protosw() returns.
> But I need to defer to networking guys on this one.

Hello, Junjie,

Ran into one of the networking guys off-list. Apparently, the
synchronize_net() is there out of paranoia. It might be necessary,
but he could not think of a reason for its being there. If you want
to shave 30ms off of your boot time by removing it, here is his
suggested test procedure:

o Write a small dummy protocol as a module.

o On an SMP machine, have one process repeated modprobe/rmmod
while another process repeatedly does socket() calls for
the dummy protocol.

Thanx, Paul
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at