From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by dpdk.org (Postfix) with ESMTP id 86F78DE4 for ; Tue, 11 Mar 2014 06:41:51 +0100 (CET) Received: from mailgate3.nec.co.jp ([10.7.69.197]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id s2B5hKPM020072 for ; Tue, 11 Mar 2014 14:43:20 +0900 (JST) Received: from mailsv3.nec.co.jp (imss61.nec.co.jp [10.7.69.156]) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) with ESMTP id s2B5hK313365 for ; Tue, 11 Mar 2014 14:43:20 +0900 (JST) Received: from mail02.kamome.nec.co.jp (mail02.kamome.nec.co.jp [10.25.43.5]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id s2B5hKN3007607 for ; Tue, 11 Mar 2014 14:43:20 +0900 (JST) Received: from bpxc99gp.gisp.nec.co.jp ([10.38.151.141] [10.38.151.141]) by mail02.kamome.nec.co.jp with ESMTP id BT-MMP-107883; Tue, 11 Mar 2014 14:40:27 +0900 Received: from BPXM14GP.gisp.nec.co.jp ([169.254.1.238]) by BPXC13GP.gisp.nec.co.jp ([10.38.151.141]) with mapi id 14.02.0328.011; Tue, 11 Mar 2014 14:40:27 +0900 From: Hiroshi Shimamoto To: "dev@dpdk.org" Thread-Topic: [memnic PATCH 5/5] pmd: handle multiple segments on xmit Thread-Index: Ac887FqEMoIa9OGNTzGnoWUThhJQdA== Date: Tue, 11 Mar 2014 05:40:26 +0000 Message-ID: <7F861DC0615E0C47A872E6F3C5FCDDBD01073B71@BPXM14GP.gisp.nec.co.jp> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.205.5.123] Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: Hayato Momma Subject: [dpdk-dev] [memnic PATCH 5/5] pmd: handle multiple segments on xmit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Mar 2014 05:41:52 -0000 From: Hiroshi Shimamoto The current MEMNIC PMD cannot handle multiple segments. Add the functionality to transmit a mbuf which has multiple segments. Walk every segment in transmitting mbuf and copy the data to MEMNIC packet buffer. Signed-off-by: Hiroshi Shimamoto Reviewed-by: Hayato Momma --- pmd/pmd_memnic.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pmd/pmd_memnic.c b/pmd/pmd_memnic.c index abfd437..4ee655d 100644 --- a/pmd/pmd_memnic.c +++ b/pmd/pmd_memnic.c @@ -324,9 +324,11 @@ static uint16_t memnic_xmit_pkts(void *tx_queue, pkts =3D bytes =3D errs =3D 0; =20 for (nr =3D 0; nr < nb_pkts; nr++) { - int len =3D rte_pktmbuf_data_len(tx_pkts[nr]); + int pkt_len =3D rte_pktmbuf_pkt_len(tx_pkts[nr]); + struct rte_mbuf *sg; + void *ptr; =20 - if (len > MEMNIC_MAX_FRAME_LEN) { + if (pkt_len > MEMNIC_MAX_FRAME_LEN) { errs++; break; } @@ -356,12 +358,19 @@ retry: idx =3D 0; adapter->down_idx =3D idx; =20 - p->len =3D len; + p->len =3D pkt_len; =20 - rte_memcpy(p->data, rte_pktmbuf_mtod(tx_pkts[nr], void *), len); + ptr =3D p->data; + for (sg =3D tx_pkts[nr]; sg; sg =3D sg->pkt.next) { + void *src =3D rte_pktmbuf_mtod(sg, void *); + int data_len =3D sg->pkt.data_len; + + rte_memcpy(ptr, src, data_len); + ptr +=3D data_len; + } =20 pkts++; - bytes +=3D len; + bytes +=3D pkt_len; =20 rte_mb(); p->status =3D MEMNIC_PKT_ST_FILLED; --=20 1.8.4