Re: ether_input question

2007-03-17 Thread Kip Macy
The reason the drivers drop their locks is that the network stack frequently holds locks over calls to driver output routines. As a result, driver locks tend to follow network stack locks in the lock order--at least, for drivers that have a single lock covering both send and receive paths (quite

Re: ether_input question

2007-03-17 Thread John Polstra
Aniruddha Bohra wrote: Hi, In two drivers, fxp and em, the assumptions about entering the ether_input routine are different. From em_rxeof: #ifdef DEVICE_POLLING EM_UNLOCK() (*ifp->if_input)() EM_UNLOCK() #else (*ifp->if_input)() #endif While in fxp: FXP_UNLOCK() (*ifp->if_input)() FXP_LOC

Re: ether_input question

2007-03-17 Thread Robert Watson
On Fri, 16 Mar 2007, Aniruddha Bohra wrote: Robert Watson wrote: I can't speak to the details of the above, but can speak generally on the issue of the link layer input path and locking. There is no assumption that the caller will provide serialization, and fully concurrent input from mul

Re: ether_input question

2007-03-16 Thread Aniruddha Bohra
Robert Watson wrote: On Fri, 16 Mar 2007, Aniruddha Bohra wrote: My question is : Does ether_input() assume it is the only thread executing the code? If it is the case, what is the reason for dropping the lock in the DEVICE_POLLING case? I can't speak to the details of the above, but can spea

Re: ether_input question

2007-03-16 Thread Robert Watson
On Fri, 16 Mar 2007, Aniruddha Bohra wrote: In two drivers, fxp and em, the assumptions about entering the ether_input routine are different. From em_rxeof: #ifdef DEVICE_POLLING EM_UNLOCK() (*ifp->if_input)() EM_UNLOCK() #else (*ifp->if_input)() #endif While in fxp: FXP_UNLOCK() (*ifp->if_

ether_input question

2007-03-16 Thread Aniruddha Bohra
Hi, In two drivers, fxp and em, the assumptions about entering the ether_input routine are different. From em_rxeof: #ifdef DEVICE_POLLING EM_UNLOCK() (*ifp->if_input)() EM_UNLOCK() #else (*ifp->if_input)() #endif While in fxp: FXP_UNLOCK() (*ifp->if_input)() FXP_LOCK() My question is : Do