[dpdk-dev] virtio: check mbuf is direct when using any layout

Message ID 1462810775-7538-1-git-send-email-olivier.matz@6wind.com (mailing list archive)
State Accepted, archived
Delegated to: Yuanhan Liu
Headers

Commit Message

Olivier Matz May 9, 2016, 4:19 p.m. UTC
  The commit dd856dfcb9e74 introduced an optimization that prepends virtio
header to mbuf data. It can be used when the tx mbuf is writeable, so we
need to check that the mbuf is direct (i.e. it embeds its own data).

Fixes: dd856dfcb9e74 "virtio: use any layout on Tx"

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---
 drivers/net/virtio/virtio_rxtx.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Yuanhan Liu May 23, 2016, 1:52 p.m. UTC | #1
On Mon, May 09, 2016 at 06:19:35PM +0200, Olivier Matz wrote:
> The commit dd856dfcb9e74 introduced an optimization that prepends virtio
> header to mbuf data. It can be used when the tx mbuf is writeable, so we
> need to check that the mbuf is direct (i.e. it embeds its own data).
> 
> Fixes: dd856dfcb9e74 "virtio: use any layout on Tx"

Missing "()" here. Fixed and applied to dpdk-next-virtio.

Thanks.

	--yliu
  

Patch

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index ef21d8e..ae28634 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -886,6 +886,7 @@  virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 		/* optimize ring usage */
 		if (vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) &&
 		    rte_mbuf_refcnt_read(txm) == 1 &&
+		    RTE_MBUF_DIRECT(txm) &&
 		    txm->nb_segs == 1 &&
 		    rte_pktmbuf_headroom(txm) >= hdr_size &&
 		    rte_is_aligned(rte_pktmbuf_mtod(txm, char *),