[dpdk-dev] [PATCH v2 06/16] fm10k: add Vector RX function

Chen, Jing D jing.d.chen at intel.com
Tue Oct 27 06:32:22 CET 2015


Hi, Steve,

Best Regards,
Mark


> -----Original Message-----
> From: Liang, Cunming
> Sent: Tuesday, October 27, 2015 1:25 PM
> To: Chen, Jing D; dev at dpdk.org
> Cc: Tao, Zhe; He, Shaopeng; Ananyev, Konstantin; Richardson, Bruce
> Subject: Re: [PATCH v2 06/16] fm10k: add Vector RX function
> 
> Hi,
> 
> On 10/22/2015 5:44 PM, Chen Jing D(Mark) wrote:
> > From: "Chen Jing D(Mark)" <jing.d.chen at intel.com>
> >
> > Add func fm10k_recv_raw_pkts_vec to parse raw packets, in which
> > includes possible chained packets.
> > Add func fm10k_recv_pkts_vec to receive single mbuf packet.
> >
> > Signed-off-by: Chen Jing D(Mark) <jing.d.chen at intel.com>
> > ---
> >   drivers/net/fm10k/fm10k.h          |    1 +
> >   drivers/net/fm10k/fm10k_rxtx_vec.c |  196
> ++++++++++++++++++++++++++++++++++++
> >   2 files changed, 197 insertions(+), 0 deletions(-)
> [...]
> > +	/* mask to shuffle from desc. to mbuf */
> > +	shuf_msk = _mm_set_epi8(
> > +		7, 6, 5, 4,  /* octet 4~7, 32bits rss */
> > +		15, 14,      /* octet 14~15, low 16 bits vlan_macip */
> > +		13, 12,      /* octet 12~13, 16 bits data_len */
> > +		0xFF, 0xFF,  /* skip high 16 bits pkt_len, zero out */
> > +		13, 12,      /* octet 12~13, low 16 bits pkt_len */
> > +		0xFF, 0xFF,  /* skip high 16 bits pkt_type */
> > +		0xFF, 0xFF   /* Skip pkt_type field in shuffle operation */
> > +		);
> > +
> > +	/* Cache is empty -> need to scan the buffer rings, but first move
> > +	 * the next 'n' mbufs into the cache
> > +	 */
> > +	mbufp = &rxq->sw_ring[next_dd];
> > +
> > +	/* A. load 4 packet in one loop
> > +	 * [A*. mask out 4 unused dirty field in desc]
> > +	 * B. copy 4 mbuf point from swring to rx_pkts
> > +	 * C. calc the number of DD bits among the 4 packets
> > +	 * [C*. extract the end-of-packet bit, if requested]
> > +	 * D. fill info. from desc to mbuf
> > +	 */
> > +	for (pos = 0, nb_pkts_recd = 0; pos < nb_pkts;
> It's necessary to floor align the nb_pkts into RTE_FM10K_DESCS_PER_LOOP,
> otherwise it may exceed the rx_pkts array.
> e.g. nb_pkts is 6, it executes twice in the loop which has chance to get
> 8 packets done, but rx_pkts only expect 6 packets.

You are right. I'll change accordingly. 

> >
> > +			pos += RTE_FM10K_DESCS_PER_LOOP,
> > +			rxdp += RTE_FM10K_DESCS_PER_LOOP) {
> > +		__m128i descs0[RTE_FM10K_DESCS_PER_LOOP];
> > +		__m128i pkt_mb1, pkt_mb2, pkt_mb3, pkt_mb4;
> > +		__m128i zero, staterr, sterr_tmp1, sterr_tmp2;
> > +		__m128i mbp1, mbp2; /* two mbuf pointer in one XMM reg.
> */
> > +
> >



More information about the dev mailing list