aboutsummaryrefslogtreecommitdiffstats
path: root/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch')
-rw-r--r--debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch b/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
new file mode 100644
index 00000000..d5402b82
--- /dev/null
+++ b/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
@@ -0,0 +1,58 @@
+From 34c2e7026fb30f6756d2c84d07d99c94106bb2ab Mon Sep 17 00:00:00 2001
+From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Date: Mon, 13 Mar 2017 13:32:11 +0530
+Subject: [PATCH] net/thunderx: check data offset alignment requirement
+
+nicvf HW expects the DMA address of the packet data to be
+aligned with cache line size.
+
+Packet data offset is a function of struct mbuf size,
+mbuf private size and headroom. mbuf private size can
+be changed from the application in pool creation, this
+check detects HW alignment requirement constraint in pmd
+start function.
+
+Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
+---
+ drivers/net/thunderx/nicvf_ethdev.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=34c2e7026fb30f6756d2c84d07d99c94106bb2ab
+Original-Author: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/drivers/net/thunderx/nicvf_ethdev.c
++++ b/drivers/net/thunderx/nicvf_ethdev.c
+@@ -1407,7 +1407,7 @@
+ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz)
+ {
+ int ret;
+- uint16_t qidx;
++ uint16_t qidx, data_off;
+ uint32_t total_rxq_desc, nb_rbdr_desc, exp_buffs;
+ uint64_t mbuf_phys_off = 0;
+ struct nicvf_rxq *rxq;
+@@ -1448,10 +1448,18 @@
+ nic->vf_id, qidx, rxq->pool->name);
+ return -ENOMEM;
+ }
+- rxq->mbuf_phys_off -= nicvf_mbuff_meta_length(mbuf);
+- rxq->mbuf_phys_off -= RTE_PKTMBUF_HEADROOM;
++ data_off = nicvf_mbuff_meta_length(mbuf);
++ data_off += RTE_PKTMBUF_HEADROOM;
+ rte_pktmbuf_free(mbuf);
+
++ if (data_off % RTE_CACHE_LINE_SIZE) {
++ PMD_INIT_LOG(ERR, "%s: unaligned data_off=%d delta=%d",
++ rxq->pool->name, data_off,
++ data_off % RTE_CACHE_LINE_SIZE);
++ return -EINVAL;
++ }
++ rxq->mbuf_phys_off -= data_off;
++
+ if (mbuf_phys_off == 0)
+ mbuf_phys_off = rxq->mbuf_phys_off;
+ if (mbuf_phys_off != rxq->mbuf_phys_off) {