svn commit: r258328 - head/sys/net

Julian Elischer julian at freebsd.org
Wed Nov 20 20:13:00 UTC 2013


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;
>     };
>
>     int
>     ether_input(struct ifnet *ifp, struct mbuf_queue *m)
>     {
>
>         ...
>     }
or separate entrypoints, old and and new
>
>     ...
>         struct mbuf_queue mq = { m };
>
>         return (ether_input(ifp, &mq));
>     ...
>
> That way the compiler can help us figure out where we expect an 
> individual packet but have accidentally leaked a queue.  Functions 
> that accept only a single packet could also more agressively assert 
> that m->m_nextpkt is NULL:
>
>     M_ASSERT_ONEPACKET(m);
>
> Robert
>
>>
>>
>



More information about the svn-src-all mailing list