svn commit: r258328 - head/sys/net

Vijay Singh vijju.singh at gmail.com
Wed Nov 27 05:00:16 UTC 2013


Sorry to join this late, I've been busy preparing other patches to roll out.

I am OK either way. FWIW we're running with this @netapp for more than 2
years, but we do use only very few drivers. I would like to avoid the
proliferation of APIs but Robert's point also does make sense.


On Sat, Nov 23, 2013 at 2:57 AM, Robert Watson <rwatson at freebsd.org> wrote:

> On Wed, 20 Nov 2013, Julian Elischer wrote:
>
>  After that it'd be nice to write a set of mbuf list macros for abstract
>>> the whole queue, dequeue, concat, iterate, etc (like sys/queue.h, but for
>>> mbufs.)
>>>
>>> What do people think?
>>>
>>> (I've been doing it for m->next chained things, but not m->m_nextpkt
>>> things..)
>>>
>>
>> I was thinking: new interfaces.. (your -multi names sound good). macros
>> for handling said lists so that people don't screw them up Old drivers run
>> with no change.
>>
>
> To me, the name "multi" is ambiguous: could be multicast.  If we call the
> new datastructure "mbqueue" or "mqueue", then we should name the method
> ether_input_mbqueue or ether_input_mqueue.
>
> Robert
>
>
>
>
>
>
>>
>>>
>>>
>>> -adrian
>>>
>>>
>>> On 18 November 2013 14:58, George V. Neville-Neil <gnn at freebsd.org>
>>> wrote:
>>>
>>>> Author: gnn
>>>> Date: Mon Nov 18 22:58:14 2013
>>>> New Revision: 258328
>>>> URL: http://svnweb.freebsd.org/changeset/base/258328
>>>>
>>>> Log:
>>>>    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
>>>>
>>>> Modified:
>>>>    head/sys/net/if_ethersubr.c
>>>>
>>>> Modified: head/sys/net/if_ethersubr.c
>>>> ============================================================
>>>> ==================
>>>> --- head/sys/net/if_ethersubr.c Mon Nov 18 22:55:50 2013
>>>>  (r258327)
>>>> +++ head/sys/net/if_ethersubr.c Mon Nov 18 22:58:14 2013
>>>>  (r258328)
>>>> @@ -708,13 +708,25 @@ static void
>>>>   ether_input(struct ifnet *ifp, struct mbuf *m)
>>>>   {
>>>>
>>>> +       struct mbuf *mn;
>>>> +
>>>>          /*
>>>> -        * We will rely on rcvif being set properly in the deferred
>>>> context,
>>>> -        * so assert it is correct here.
>>>> +        * The drivers are allowed to pass in a chain of packets linked
>>>> with
>>>> +        * m_nextpkt. We split them up into separate packets here and
>>>> pass
>>>> +        * them up. This allows the drivers to amortize the receive
>>>> lock.
>>>>           */
>>>> -       KASSERT(m->m_pkthdr.rcvif == ifp, ("%s: ifnet mismatch",
>>>> __func__));
>>>> +       while (m) {
>>>> +               mn = m->m_nextpkt;
>>>> +               m->m_nextpkt = NULL;
>>>>
>>>> -       netisr_dispatch(NETISR_ETHER, m);
>>>> +               /*
>>>> +                * We will rely on rcvif being set properly in the
>>>> deferred context,
>>>> +                * so assert it is correct here.
>>>> +                */
>>>> +               KASSERT(m->m_pkthdr.rcvif == ifp, ("%s: ifnet
>>>> mismatch", __func__));
>>>> +               netisr_dispatch(NETISR_ETHER, m);
>>>> +               m = mn;
>>>> +       }
>>>>   }
>>>>
>>>>   /*
>>>>
>>>
>>
>>  _______________________________________________
> svn-src-head at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
>


More information about the svn-src-all mailing list