From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 140F55A41 for ; Tue, 1 Sep 2015 05:40:07 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 31 Aug 2015 20:40:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,446,1437462000"; d="scan'208";a="759639671" Received: from pgsmsx106.gar.corp.intel.com ([10.221.44.98]) by orsmga001.jf.intel.com with ESMTP; 31 Aug 2015 20:40:06 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.110.14) by PGSMSX106.gar.corp.intel.com (10.221.44.98) with Microsoft SMTP Server (TLS) id 14.3.224.2; Tue, 1 Sep 2015 11:40:05 +0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.206]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.248]) with mapi id 14.03.0224.002; Tue, 1 Sep 2015 11:40:03 +0800 From: "Ouyang, Changchun" To: "Liu, Jijiang" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [RFC PATCH 5/8] lib/librte_vhost:dequeue vhost TSO offload Thread-Index: AQHQ49F2e+7PyrGa/06XPRpiAy1meJ4nB8XQ Date: Tue, 1 Sep 2015 03:40:02 +0000 Message-ID: References: <1441014108-3125-1-git-send-email-jijiang.liu@intel.com> <1441014108-3125-6-git-send-email-jijiang.liu@intel.com> In-Reply-To: <1441014108-3125-6-git-send-email-jijiang.liu@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC PATCH 5/8] lib/librte_vhost:dequeue vhost TSO offload 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, 01 Sep 2015 03:40:08 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jijiang Liu > Sent: Monday, August 31, 2015 5:42 PM > To: dev@dpdk.org > Subject: [dpdk-dev] [RFC PATCH 5/8] lib/librte_vhost:dequeue vhost TSO > offload >=20 > Dequeue vhost TSO offload >=20 > Signed-off-by: Jijiang Liu > --- > lib/librte_vhost/vhost_rxtx.c | 29 ++++++++++++++++++++++++++++- > 1 files changed, 28 insertions(+), 1 deletions(-) >=20 > diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.= c > index 0d07338..9adfdb1 100644 > --- a/lib/librte_vhost/vhost_rxtx.c > +++ b/lib/librte_vhost/vhost_rxtx.c > @@ -545,6 +545,30 @@ rte_vhost_enqueue_burst(struct virtio_net *dev, > uint16_t queue_id, > return virtio_dev_rx(dev, queue_id, pkts, count); } >=20 > +static inline void __attribute__((always_inline)) > +vhost_dequeue_offload(uint64_t addr, struct rte_mbuf *m) { > + struct virtio_net_hdr *hdr =3D > + (struct virtio_net_hdr *)((uintptr_t)addr); > + > + if (hdr->gso_type !=3D VIRTIO_NET_HDR_GSO_NONE) { > + switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { > + case VIRTIO_NET_HDR_GSO_TCPV4: > + m->ol_flags |=3D (PKT_TX_IPV4 | PKT_TX_TCP_SEG); > + m->tso_segsz =3D hdr->gso_size; > + break; > + case VIRTIO_NET_HDR_GSO_TCPV6: > + m->ol_flags |=3D (PKT_TX_IPV6 | PKT_TX_TCP_SEG); > + m->tso_segsz =3D hdr->gso_size; > + break; > + default: > + RTE_LOG(ERR, VHOST_DATA, > + "bad gso type %u.\n", hdr->gso_type); > + break; Do we need special handling for the bad gso type?=20 > + } > + } > +} > + > uint16_t > rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id, > struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t > count) @@ -553,6 +577,7 @@ rte_vhost_dequeue_burst(struct virtio_net > *dev, uint16_t queue_id, > struct vhost_virtqueue *vq; > struct vring_desc *desc; > uint64_t vb_addr =3D 0; > + uint64_t vb_net_hdr_addr =3D 0; > uint32_t head[MAX_PKT_BURST]; > uint32_t used_idx; > uint32_t i; > @@ -604,6 +629,8 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, > uint16_t queue_id, >=20 > desc =3D &vq->desc[head[entry_success]]; >=20 > + vb_net_hdr_addr =3D gpa_to_vva(dev, desc->addr); > + > /* Discard first buffer as it is the virtio header */ > if (desc->flags & VRING_DESC_F_NEXT) { > desc =3D &vq->desc[desc->next]; > @@ -742,7 +769,7 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, > uint16_t queue_id, > break; >=20 > m->nb_segs =3D seg_num; > - > + vhost_dequeue_offload(vb_net_hdr_addr, m); > pkts[entry_success] =3D m; > vq->last_used_idx++; > entry_success++; > -- > 1.7.7.6