tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: locking order between softnet_lock and the kernel lock



hi,

> Here at BBN, we are getting a hang with heavy use of networking code and 
> looking for possible deadlocks.  We've made modifications to the kernel.  I'm 
> trying to understand the lock order invariants to make sure we have applied 
> it correctly to our code.
> 
> 
> I see a number of instances of code that look like this:
> 
> mutex_enter(softnet_lock);
> KERNEL_LOCK(1, NULL);
> <do something>
> KERNEL_UNLOCK_ONE(NULL);
> <maybe do something else>
> mutex_exit(softnet_lock);
> 
> Am I correct to infer that the kernel lock should always be taken (if taken 
> at all) AFTER softnet_lock is taken, and released before softnet_lock is 
> released?
> 
> In in_pcbdetach (and the equivalent function in ip6), there is the following 
> code:
> sofree(so);                   /* drops the socket's lock */
> mutex_enter(softnet_lock);    /* reacquire the softnet_lock */
> 
> I'm curious if a deadlock could occur between sofree and mutex_enter because 
> the kernel lock may be held when this is called.
> 
> What are the rules for locking order with softnet_lock and the kernel lock?

an adaptive mutex and kernel lock can be acquired in any order
without deadlock.

YAMAMOTO Takashi

> 
> --
> Bev Schwartz <bschwart%bbn.com@localhost>
> BBN Technologies


Home | Main Index | Thread Index | Old Index