Date: Tue, 26 Nov 2013 21:00:14 -0800 From: Vijay Singh <vijju.singh@gmail.com> To: Robert Watson <rwatson@freebsd.org> Cc: Adrian Chadd <adrian@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>, FreeBSD Net <freebsd-net@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "George V. Neville-Neil" <gnn@freebsd.org>, "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, Julian Elischer <julian@freebsd.org> Subject: Re: svn commit: r258328 - head/sys/net Message-ID: <CALCNsJQE=Yi%2BeX80H1BFQcgfr_DkEoPFcEtRgB=pBMr3hap_Mw@mail.gmail.com> In-Reply-To: <alpine.BSF.2.00.1311231056110.6980@fledge.watson.org> References: <201311182258.rAIMwEFd048783@svn.freebsd.org> <CAJ-VmomjQrq39jafTTGQA_EJLSi5j%2BNB=g1sLwCK-KaEfgwrbw@mail.gmail.com> <528D6173.4080406@freebsd.org> <alpine.BSF.2.00.1311231056110.6980@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALCNsJQE=Yi%2BeX80H1BFQcgfr_DkEoPFcEtRgB=pBMr3hap_Mw>