From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhiyong Yang Subject: [PATCH v3] net/virtio: fix wrong TX pkt length stats Date: Tue, 24 Oct 2017 11:06:14 +0800 Message-ID: <20171024030614.37690-1-zhiyong.yang@intel.com> References: <20171023064036.56821-1-zhiyong.yang@intel.com> Cc: stable@dpdk.org, yliu@fridaylinux.org, maxime.coquelin@redhat.com, Zhiyong Yang To: dev@dpdk.org Return-path: In-Reply-To: <20171023064036.56821-1-zhiyong.yang@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In the function virtqueue_enqueue_xmit(), when can_push is true, vtnet_hdr_size is added to pkt_len by calling rte_pktmbuf_prepend. which is wrong for pkt stats, virtio header length should be subtracted before calling stats function. Fixes: 58169a9c8153 ("net/virtio: support Tx checksum offload") Cc: stable@dpdk.org Cc: yliu@fridaylinux.org Cc: maxime.coquelin@redhat.com Signed-off-by: Zhiyong Yang Reviewed-by: Maxime Coquelin --- Changes in V3: Move code inside "if (can_push)" clause and simplify comments. Changes in V2: Put code in the function virtqueue_enqueue_xmit() according to yuanhan's comments. drivers/net/virtio/virtio_rxtx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c index 2cf82fef4..ac4055d45 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c @@ -299,6 +299,10 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie, /* prepend cannot fail, checked by caller */ hdr = (struct virtio_net_hdr *) rte_pktmbuf_prepend(cookie, head_size); + /* rte_pktmbuf_prepend() counts the hdr size to the pkt length, + * which is wrong. Below subtract restores correct pkt size. + */ + cookie->pkt_len -= head_size; /* if offload disabled, it is not zeroed below, do it now */ if (offload == 0) { ASSIGN_UNLESS_EQUAL(hdr->csum_start, 0); -- 2.13.3