diff options
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.patch | 58 |
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) { |