diff options
Diffstat (limited to 'dpdk/dpdk-16.04_patches/0025-enic-fixup-of-Rx-Scatter-patch.patch')
-rw-r--r-- | dpdk/dpdk-16.04_patches/0025-enic-fixup-of-Rx-Scatter-patch.patch | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/dpdk/dpdk-16.04_patches/0025-enic-fixup-of-Rx-Scatter-patch.patch b/dpdk/dpdk-16.04_patches/0025-enic-fixup-of-Rx-Scatter-patch.patch deleted file mode 100644 index e4e9f4305d8..00000000000 --- a/dpdk/dpdk-16.04_patches/0025-enic-fixup-of-Rx-Scatter-patch.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 3131adb7f4195771bf54b294b2ee496055c3e65d Mon Sep 17 00:00:00 2001 -From: Nelson Escobar <neescoba@cisco.com> -Date: Tue, 14 Jun 2016 11:54:01 -0700 -Subject: [PATCH 25/25] enic: fixup of Rx Scatter patch - -A version of the Rx Scatter patch was used by VPP before the -patch was accepted in dpdk.org. This patch contains the change -made to the patch before it was accepted. - -Composed of internal dpdk devel patches: -enic: fixup rq count usage in wake of rx scatter -enic: update checks since RX scatter uses 2 VIC RQs per app RQ. -enic: fix packet type and flags when doing scatter Rx - -fixes: ENIC scatter RX - -Signed-off-by: Nelson Escobar <neescoba@cisco.com> ---- - drivers/net/enic/enic.h | 12 ++++++++++-- - drivers/net/enic/enic_ethdev.c | 7 +++++-- - drivers/net/enic/enic_main.c | 19 +++++++++++-------- - drivers/net/enic/enic_res.c | 5 +++-- - drivers/net/enic/enic_rxtx.c | 7 +++++-- - 5 files changed, 34 insertions(+), 16 deletions(-) - -diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h -index 8b0fa05..9cc9f0b 100644 ---- a/drivers/net/enic/enic.h -+++ b/drivers/net/enic/enic.h -@@ -55,8 +55,11 @@ - #define DRV_COPYRIGHT "Copyright 2008-2015 Cisco Systems, Inc" - - #define ENIC_WQ_MAX 8 --#define ENIC_RQ_MAX 8 --#define ENIC_CQ_MAX (ENIC_WQ_MAX + ENIC_RQ_MAX) -+/* With Rx scatter support, we use two RQs on VIC per RQ used by app. Both -+ * RQs use the same CQ. -+ */ -+#define ENIC_RQ_MAX 16 -+#define ENIC_CQ_MAX (ENIC_WQ_MAX + (ENIC_RQ_MAX / 2)) - #define ENIC_INTR_MAX (ENIC_CQ_MAX + 2) - - #define VLAN_ETH_HLEN 18 -@@ -163,6 +166,11 @@ static inline unsigned int enic_data_rq(__rte_unused struct enic *enic, unsigned - return rq * 2 + 1; - } - -+static inline unsigned int enic_vnic_rq_count(struct enic *enic) -+{ -+ return (enic->rq_count * 2); -+} -+ - static inline unsigned int enic_cq_rq(__rte_unused struct enic *enic, unsigned int rq) - { - /* Scatter rx uses two receive queues together with one -diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c -index 697ff82..e5b84e1 100644 ---- a/drivers/net/enic/enic_ethdev.c -+++ b/drivers/net/enic/enic_ethdev.c -@@ -269,9 +269,12 @@ static int enicpmd_dev_rx_queue_setup(struct rte_eth_dev *eth_dev, - struct enic *enic = pmd_priv(eth_dev); - - ENICPMD_FUNC_TRACE(); -- if (queue_idx >= ENIC_RQ_MAX) { -+ /* With Rx scatter support, two RQs are now used on VIC per RQ used -+ * by the application. -+ */ -+ if (queue_idx * 2 >= ENIC_RQ_MAX) { - dev_err(enic, -- "Max number of RX queues exceeded. Max is %d\n", -+ "Max number of RX queues exceeded. Max is %d. This PMD uses 2 RQs on VIC per RQ used by DPDK.\n", - ENIC_RQ_MAX); - return -EINVAL; - } -diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c -index 976c9da..ff94ee2 100644 ---- a/drivers/net/enic/enic_main.c -+++ b/drivers/net/enic/enic_main.c -@@ -133,7 +133,7 @@ static void enic_log_q_error(struct enic *enic) - error_status); - } - -- for (i = 0; i < enic->rq_count; i++) { -+ for (i = 0; i < enic_vnic_rq_count(enic); i++) { - error_status = vnic_rq_error_status(&enic->rq[i]); - if (error_status) - dev_err(enic, "RQ[%d] error_status %d\n", i, -@@ -486,7 +486,7 @@ int enic_alloc_intr_resources(struct enic *enic) - - dev_info(enic, "vNIC resources used: "\ - "wq %d rq %d cq %d intr %d\n", -- enic->wq_count, enic->rq_count, -+ enic->wq_count, enic_vnic_rq_count(enic), - enic->cq_count, enic->intr_count); - - err = vnic_intr_alloc(enic->vdev, &enic->intr, 0); -@@ -790,10 +790,12 @@ int enic_disable(struct enic *enic) - if (err) - return err; - } -- for (i = 0; i < enic->rq_count; i++) { -- err = vnic_rq_disable(&enic->rq[i]); -- if (err) -- return err; -+ for (i = 0; i < enic_vnic_rq_count(enic); i++) { -+ if (enic->rq[i].in_use) { -+ err = vnic_rq_disable(&enic->rq[i]); -+ if (err) -+ return err; -+ } - } - - vnic_dev_set_reset_flag(enic->vdev, 1); -@@ -802,8 +804,9 @@ int enic_disable(struct enic *enic) - for (i = 0; i < enic->wq_count; i++) - vnic_wq_clean(&enic->wq[i], enic_free_wq_buf); - -- for (i = 0; i < enic->rq_count; i++) -- vnic_rq_clean(&enic->rq[i], enic_free_rq_buf); -+ for (i = 0; i < enic_vnic_rq_count(enic); i++) -+ if (enic->rq[i].in_use) -+ vnic_rq_clean(&enic->rq[i], enic_free_rq_buf); - for (i = 0; i < enic->cq_count; i++) - vnic_cq_clean(&enic->cq[i]); - vnic_intr_clean(&enic->intr); -diff --git a/drivers/net/enic/enic_res.c b/drivers/net/enic/enic_res.c -index ebe379d..42edd84 100644 ---- a/drivers/net/enic/enic_res.c -+++ b/drivers/net/enic/enic_res.c -@@ -196,8 +196,9 @@ void enic_free_vnic_resources(struct enic *enic) - - for (i = 0; i < enic->wq_count; i++) - vnic_wq_free(&enic->wq[i]); -- for (i = 0; i < enic->rq_count; i++) -- vnic_rq_free(&enic->rq[i]); -+ for (i = 0; i < enic_vnic_rq_count(enic); i++) -+ if (enic->rq[i].in_use) -+ vnic_rq_free(&enic->rq[i]); - for (i = 0; i < enic->cq_count; i++) - vnic_cq_free(&enic->cq[i]); - vnic_intr_free(&enic->intr); -diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c -index 463b954..c68bbfb 100644 ---- a/drivers/net/enic/enic_rxtx.c -+++ b/drivers/net/enic/enic_rxtx.c -@@ -326,8 +326,7 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, - - /* Fill in the rest of the mbuf */ - seg_length = enic_cq_rx_desc_n_bytes(&cqd); -- rxmb->packet_type = enic_cq_rx_flags_to_pkt_type(&cqd); -- enic_cq_rx_to_pkt_flags(&cqd, rxmb); -+ - if (rq->is_sop) { - first_seg = rxmb; - first_seg->nb_segs = 1; -@@ -350,6 +349,10 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, - continue; - } - -+ /* cq rx flags are only valid if eop bit is set */ -+ first_seg->packet_type = enic_cq_rx_flags_to_pkt_type(&cqd); -+ enic_cq_rx_to_pkt_flags(&cqd, first_seg); -+ - if (unlikely(packet_error)) { - rte_pktmbuf_free(first_seg); - rte_atomic64_inc(&enic->soft_stats.rx_packet_errors); --- -2.7.0 - |