netgraph: why does ng_ether bother enqueuing packets?

Julian Elischer julian at elischer.org
Thu May 22 11:42:00 PDT 2003



On Thu, 22 May 2003, Dave Dolson wrote:

> 
> Julian Elischer wrote:
> > On Wed, 21 May 2003, Vincent Jardin wrote:
> > 
> > > Le Mercredi 21 Mai 2003 23:03, Dave Dolson a =E9crit :
> > > > For reasons of performance, I tried the following modification to
> > > > ng_ether.c in FreeBSD 4.7, and it seemed to work fine.
> > > > The change is to call ng_send_data() vs. ng_queue_data().
> > 
> > The change is ok as long as you know that you are at splnet.
> 
> I was trying to understand why it would be wrong to call ng_send_data from
> an interrupt running at splimp().
> 
> Is this the correct explanation:
> The netgraph (and most of net) code protects its data structures at splnet()
> under the assumption that no routine capable of interrupting it will affect
> those data structures.  And the ether device interrupt routine can interrupt
> code at splnet().


yes.
it upgrades itself to splimp at crucial points (i.e.
when passing data to the driver or dequeueing data from the queue)

> 
> BTW, in FreeBSD how does one determine the spl level at which a device's
> interrupt routines execute?
>

When you declare the interrupt driver that information is a part of the 
declaration (either if you folllow the pointers).
 
> 
> Thanks for the feedback,
> David Dolson (ddolson at sandvine.com, www.sandvine.com)
> 
> 



More information about the freebsd-net mailing list