Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Nov 2013 21:40:04 +0100
From:      Luigi Rizzo <rizzo@iet.unipi.it>
To:        Julian Elischer <julian@freebsd.org>
Cc:        svn-src-head@freebsd.org, "George V. Neville-Neil" <gnn@FreeBSD.org>, svn-src-all@freebsd.org, src-committers@freebsd.org, Robert Watson <rwatson@FreeBSD.org>
Subject:   Re: svn commit: r258328 - head/sys/net
Message-ID:  <20131120204004.GA29017@onelab2.iet.unipi.it>
In-Reply-To: <528D1768.9000401@freebsd.org>
References:  <201311182258.rAIMwEFd048783@svn.freebsd.org> <alpine.BSF.2.00.1311191101060.50802@fledge.watson.org> <528D1768.9000401@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Nov 20, 2013 at 12:11:20PM -0800, Julian Elischer wrote:
> On 11/19/13, 3:04 AM, Robert Watson wrote:
> > On Mon, 18 Nov 2013, George V. Neville-Neil wrote:
> >
> >>  Allow ethernet drivers to pass in packets connected via the 
> >> nextpkt pointer.
> >>  Handling packets in this way allows drivers to amortize work 
> >> during packet reception.
> >>
> >>  Submitted by:    Vijay Singh
> >>  Sponsored by:    NetApp
> >
> > Currently, it is quite easy to make mistakes regarding individual 
> > mbuf chains vs. lists of mbuf chains.  This leads me to wonder 
> > whether a new type, perhaps simply constructed on the stack before 
> > passing in, should be used for KPIs that accept lists of packets. E.g.,
> >
> >     /*
> >      * This structure is almost always allocated on a caller stack, so
> >      * cannot itself be queued without memory allocation in most cases.
> >      */
> >     struct mbuf_queue {
> >         struct mbuf    *mq_head;
> >     };
> >
> >
> It's hard to believe that we don't have a structure around already 
> that we can't use. With Luigi's comment, I wonder that there isn't an 
> mbuf_list structure already we can just steal. it could almost be the 
> current interface input queue structure.

The fact is that the structure is so simple that every piece of code
seems to have its own implementation.

The closest thing is "struct ifqueue" in sys/net/ifq.h, but it
has some unnecessary fields (e.g. a struct mtx and a few counters).

sys/sys/sockbuf.h has a queue embedded in struct sockbuf
sys/netinet/tcp_lro.h has one in struct lro_entry

sctp and dummynet redefine their own queues, as well as a number
of device drivers (dev/xen/netfrnt/mbufq.h, cxgb,  ...)

I am not sure I see anything worth reusing.

cheers
luigi




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131120204004.GA29017>