tech-kern archive


Locking confusion

I have a socket address family I'm trying to put into 5.2.  When I put
it into 4.0.1, I asked about locking and was told, basically, not to
worry because the kernel was still giantlocked.  This appears to not be
true of 5.2, so I was trying to get the locking code right.

But there are some things which confuse me.  For example, udp_usrreq's
PRU_DETACH calls in_pcdetach, which ends with a mutex_enter on
softnet_lock.  This is commented as "reacquire the softnet_lock"; I
didn't see where it was first acquired or where it was dropped in that
code path, but there's a lot of code there.  Instead, I looked at the
code following it, to see where the lock was released, and I can't see
any, looking at (for exmaple) the close(2) path.  And udp_usrreq does
splsoftnet(), which seems moderately useless to me in a MP world.

And, just to keep things interesting, unp_detach, which is all the
AF_LOCAL PRU_DETACH handler calls, doesn't do this as far as I can see.

So I clearly am missing something.  But what?  What locking do I need
here, beyond of course the locking my AF code needs internally?

/~\ The ASCII                             Mouse
\ / Ribbon Campaign
 X  Against HTML      

Home | Main Index | Thread Index | Old Index