iokernel/dpdk: restore TCP offloads and vector TX path

This commit is contained in:
Josh Fried 2018-12-19 01:37:51 -05:00
parent a48f33b166
commit 653609de0e
2 changed files with 20 additions and 13 deletions

View File

@ -61,7 +61,7 @@ static const struct rte_eth_conf port_conf_default = {
},
},
.txmode = {
.offloads = DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM,
.offloads = DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM,
},
};

View File

@ -1,17 +1,17 @@
From cb179332767d5f421e3bd446e7fc72133d44167e Mon Sep 17 00:00:00 2001
From b1b97686d53957c1aeeb0ad9d6f8004bc3f5948c Mon Sep 17 00:00:00 2001
From: Amy Ousterhout <aousterh@mit.edu>
Date: Mon, 10 Dec 2018 16:02:53 -0500
Subject: [PATCH] new ixgbe patch
---
drivers/net/ixgbe/ixgbe_rxtx.c | 48 +++++++++++++++++++++++++++++--
drivers/net/ixgbe/ixgbe_rxtx.h | 6 ++--
drivers/net/ixgbe/ixgbe_rxtx_vec_common.h | 6 ++--
drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c | 15 +++++++++-
drivers/net/ixgbe/ixgbe_rxtx.c | 50 +++++++++++++++++++++--
drivers/net/ixgbe/ixgbe_rxtx.h | 6 +--
drivers/net/ixgbe/ixgbe_rxtx_vec_common.h | 4 +-
drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c | 15 ++++++-
4 files changed, 66 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index ddc7efa87..279d35086 100644
index ddc7efa87..22f1e6172 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -558,10 +558,10 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
@ -69,6 +69,15 @@ index ddc7efa87..279d35086 100644
/* Takes an ethdev and a queue and sets up the tx function to be used based on
* the queue parameters. Used in tx_queue_setup by primary process and then
* in dev_init by secondary process when attaching to an existing ethdev.
@@ -2382,7 +2417,7 @@ void __attribute__((cold))
ixgbe_set_tx_function(struct rte_eth_dev *dev, struct ixgbe_tx_queue *txq)
{
/* Use a simple Tx queue (no offloads, no multi segs) if possible */
- if ((txq->offloads == 0) &&
+ if ((txq->offloads & ~(DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM)) == 0 &&
#ifdef RTE_LIBRTE_SECURITY
!(txq->using_ipsec) &&
#endif
@@ -2635,6 +2670,15 @@ ixgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
dev->data->tx_queues[queue_idx] = txq;
@ -108,22 +117,20 @@ index 39378f754..f869fcec6 100644
#endif
diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h
index a97c27189..d2e02411e 100644
index a97c27189..130c6fcad 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h
@@ -94,9 +94,9 @@ ixgbe_tx_free_bufs(struct ixgbe_tx_queue *txq)
@@ -94,8 +94,8 @@ ixgbe_tx_free_bufs(struct ixgbe_tx_queue *txq)
* tx_next_dd - (tx_rs_thresh-1)
*/
txep = &txq->sw_ring_v[txq->tx_next_dd - (n - 1)];
- m = rte_pktmbuf_prefree_seg(txep[0].mbuf);
- if (likely(m != NULL)) {
- free[0] = m;
+ if (likely(txep[0].mbuf &&
+ (m = rte_pktmbuf_prefree_seg(txep[0].mbuf)) != NULL)) {
+ free[0] = m;
free[0] = m;
nb_free = 1;
for (i = 1; i < n; i++) {
m = rte_pktmbuf_prefree_seg(txep[i].mbuf);
diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c
index c9ba48246..05c3130eb 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c
@ -151,5 +158,5 @@ index c9ba48246..05c3130eb 100644
pkt->buf_iova + pkt->data_off);
_mm_store_si128((__m128i *)&txdp->read, descriptor);
--
2.13.0
2.17.1