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. > */ > > + > >