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 freebsd-net
mailing list