ether_input question

Aniruddha Bohra bohra at nec-labs.com
Fri Mar 16 14:13:55 UTC 2007


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 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 multiple threads is supported.  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 common).  As a result, the driver must drop the driver lock 
> before calling into the stack to avoid a lock order reversal.

Thanks Robert,
  So, if I have a queue shared between ether_input() and another thread, 
I need to
ensure mutual exclusion. In such scenarios, should spinlocks or default 
mutexes be
used?

  The driver locks themselves are usually MTX_DEF, whereas in netgraph 
for example,
(the scenario above), a spinlock is used. Is there a rule of thumb, for 
example, never use
blocking locks in the network interrupt path?

Thanks
Aniruddha



More information about the freebsd-net mailing list