DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Chen Jing D(Mark)" <jing.d.chen@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v4 15/16] fm10k: fix a crash issue in vector RX func
Date: Thu, 29 Oct 2015 17:16:12 +0800	[thread overview]
Message-ID: <1446110173-13330-16-git-send-email-jing.d.chen@intel.com> (raw)
In-Reply-To: <1446110173-13330-1-git-send-email-jing.d.chen@intel.com>

From: "Chen Jing D(Mark)" <jing.d.chen@intel.com>

Vector RX function will process 4 packets at a time. When the RX
ring wrapps to the tail and the left descriptor size is not multiple
of 4, SW will overwrite memory that not belongs to it and cause crash.
The fix will allocate additional 4 HW/SW spaces at the tail to avoid
overwrite.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
---
 drivers/net/fm10k/fm10k.h        |    4 +++-
 drivers/net/fm10k/fm10k_ethdev.c |   19 +++++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/net/fm10k/fm10k.h b/drivers/net/fm10k/fm10k.h
index 8e2c6a4..82a548f 100644
--- a/drivers/net/fm10k/fm10k.h
+++ b/drivers/net/fm10k/fm10k.h
@@ -177,7 +177,7 @@ struct fm10k_rx_queue {
 	struct rte_mbuf *pkt_last_seg;  /* Last segment of current packet. */
 	uint64_t hw_ring_phys_addr;
 	uint64_t mbuf_initializer; /* value to init mbufs */
-	/** need to alloc dummy mbuf, for wraparound when scanning hw ring */
+	/* need to alloc dummy mbuf, for wraparound when scanning hw ring */
 	struct rte_mbuf fake_mbuf;
 	uint16_t next_dd;
 	uint16_t next_alloc;
@@ -185,6 +185,8 @@ struct fm10k_rx_queue {
 	uint16_t alloc_thresh;
 	volatile uint32_t *tail_ptr;
 	uint16_t nb_desc;
+	/* Number of faked desc added at the tail for Vector RX function */
+	uint16_t nb_fake_desc;
 	uint16_t queue_id;
 	/* Below 2 fields only valid in case vPMD is applied. */
 	uint16_t rxrearm_nb;     /* number of remaining to be re-armed */
diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 469bd85..705b311 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -102,6 +102,7 @@ fm10k_mbx_unlock(struct fm10k_hw *hw)
 static inline int
 rx_queue_reset(struct fm10k_rx_queue *q)
 {
+	static const union fm10k_rx_desc zero = {{0} };
 	uint64_t dma_addr;
 	int i, diag;
 	PMD_INIT_FUNC_TRACE();
@@ -122,6 +123,15 @@ rx_queue_reset(struct fm10k_rx_queue *q)
 		q->hw_ring[i].q.hdr_addr = dma_addr;
 	}
 
+	/* initialize extra software ring entries. Space for these extra
+	 * entries is always allocated.
+	 */
+	memset(&q->fake_mbuf, 0x0, sizeof(q->fake_mbuf));
+	for (i = 0; i < q->nb_fake_desc; ++i) {
+		q->sw_ring[q->nb_desc + i] = &q->fake_mbuf;
+		q->hw_ring[q->nb_desc + i] = zero;
+	}
+
 	q->next_dd = 0;
 	q->next_alloc = 0;
 	q->next_trigger = q->alloc_thresh - 1;
@@ -147,6 +157,10 @@ rx_queue_clean(struct fm10k_rx_queue *q)
 	for (i = 0; i < q->nb_desc; ++i)
 		q->hw_ring[i] = zero;
 
+	/* zero faked descriptors */
+	for (i = 0; i < q->nb_fake_desc; ++i)
+		q->hw_ring[q->nb_desc + i] = zero;
+
 	/* vPMD driver has a different way of releasing mbufs. */
 	if (q->rx_using_sse) {
 		fm10k_rx_queue_release_mbufs_vec(q);
@@ -1323,6 +1337,7 @@ fm10k_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,
 	/* setup queue */
 	q->mp = mp;
 	q->nb_desc = nb_desc;
+	q->nb_fake_desc = FM10K_MULT_RX_DESC;
 	q->port_id = dev->data->port_id;
 	q->queue_id = queue_id;
 	q->tail_ptr = (volatile uint32_t *)
@@ -1332,8 +1347,8 @@ fm10k_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,
 
 	/* allocate memory for the software ring */
 	q->sw_ring = rte_zmalloc_socket("fm10k sw ring",
-					nb_desc * sizeof(struct rte_mbuf *),
-					RTE_CACHE_LINE_SIZE, socket_id);
+			(nb_desc + q->nb_fake_desc) * sizeof(struct rte_mbuf *),
+			RTE_CACHE_LINE_SIZE, socket_id);
 	if (q->sw_ring == NULL) {
 		PMD_INIT_LOG(ERR, "Cannot allocate software ring");
 		rte_free(q);
-- 
1.7.7.6

  parent reply	other threads:[~2015-10-29  9:16 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-29 13:03 [dpdk-dev] [PATCH 00/14] Vector Rx/Tx PMD implementation for fm10k Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 01/14] fm10k: add new vPMD file Chen Jing D(Mark)
2015-10-22  9:44   ` [dpdk-dev] [PATCH v2 00/16] Vector Rx/Tx PMD implementation for fm10k Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 01/16] fm10k: add new vPMD file Chen Jing D(Mark)
2015-10-22 15:58       ` Stephen Hemminger
2015-10-23  8:39         ` Chen, Jing D
2015-10-23 10:01           ` Bruce Richardson
2015-10-27  5:26             ` Chen, Jing D
2015-10-27  9:46       ` [dpdk-dev] [PATCH v3 00/16] Vector Rx/Tx PMD implementation for fm10k Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 01/16] fm10k: add new vPMD file Chen Jing D(Mark)
2015-10-29  9:15           ` [dpdk-dev] [PATCH v4 00/16] Vector Rx/Tx PMD implementation for fm10k Chen Jing D(Mark)
2015-10-29  9:15             ` [dpdk-dev] [PATCH v4 01/16] fm10k: add new vPMD file Chen Jing D(Mark)
2015-10-30  8:02               ` [dpdk-dev] [PATCH v5 00/14] Vector Rx/Tx PMD implementation for fm10k Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 01/14] fm10k: add new vPMD file Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 02/14] fm10k: add vPMD pre-condition check for each RX queue Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 03/14] fm10k: Add a new func to initialize all parameters Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 04/14] fm10k: add Vector RX function Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 05/14] fm10k: add func to do Vector RX condition check Chen Jing D(Mark)
2015-10-30  8:02                 ` [dpdk-dev] [PATCH v5 06/14] fm10k: add Vector RX scatter function Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 07/14] fm10k: add function to decide best RX function Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 08/14] fm10k: add func to release mbuf in case Vector RX applied Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 09/14] fm10k: add Vector TX function Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 10/14] fm10k: use func pointer to reset TX queue and mbuf release Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 11/14] fm10k: introduce 2 funcs " Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 12/14] fm10k: Add function to decide best TX func Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 13/14] fm10k: fix a crash issue in vector RX func Chen Jing D(Mark)
2015-10-30  8:03                 ` [dpdk-dev] [PATCH v5 14/14] doc: release notes update for fm10k Vector PMD Chen Jing D(Mark)
2015-11-02  8:36                   ` Thomas Monjalon
2015-10-30  8:26                 ` [dpdk-dev] [PATCH v5 00/14] Vector Rx/Tx PMD implementation for fm10k Liang, Cunming
2015-11-02  8:38                   ` Thomas Monjalon
2015-10-29  9:15             ` [dpdk-dev] [PATCH v4 02/16] fm10k: add vPMD pre-condition check for each RX queue Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 03/16] fm10k: Add a new func to initialize all parameters Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 04/16] fm10k: add func to re-allocate mbuf for RX ring Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 05/16] fm10k: add 2 functions to parse pkt_type and offload flag Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 06/16] fm10k: add Vector RX function Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 07/16] fm10k: add func to do Vector RX condition check Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 08/16] fm10k: add Vector RX scatter function Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 09/16] fm10k: add function to decide best RX function Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 10/16] fm10k: add func to release mbuf in case Vector RX applied Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 11/16] fm10k: add Vector TX function Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 12/16] fm10k: use func pointer to reset TX queue and mbuf release Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 13/16] fm10k: introduce 2 funcs " Chen Jing D(Mark)
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 14/16] fm10k: Add function to decide best TX func Chen Jing D(Mark)
2015-10-29  9:16             ` Chen Jing D(Mark) [this message]
2015-10-29  9:16             ` [dpdk-dev] [PATCH v4 16/16] doc: release notes update for fm10k Vector PMD Chen Jing D(Mark)
2015-10-29 10:22             ` [dpdk-dev] [PATCH v4 00/16] Vector Rx/Tx PMD implementation for fm10k Liang, Cunming
2015-10-29 23:12               ` Thomas Monjalon
2015-10-30  3:09                 ` Chen, Jing D
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 02/16] fm10k: add vPMD pre-condition check for each RX queue Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 03/16] fm10k: Add a new func to initialize all parameters Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 04/16] fm10k: add func to re-allocate mbuf for RX ring Chen Jing D(Mark)
2015-10-28 13:58           ` Liang, Cunming
2015-10-29  5:24             ` Chen, Jing D
2015-10-29  8:14               ` Liang, Cunming
2015-10-29  8:37                 ` Chen, Jing D
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 05/16] fm10k: add 2 functions to parse pkt_type and offload flag Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 06/16] fm10k: add Vector RX function Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 07/16] fm10k: add func to do Vector RX condition check Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 08/16] fm10k: add Vector RX scatter function Chen Jing D(Mark)
2015-10-28 14:30           ` Liang, Cunming
2015-10-29  5:27             ` Chen, Jing D
2015-10-29  8:06               ` Liang, Cunming
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 09/16] fm10k: add function to decide best RX function Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 10/16] fm10k: add func to release mbuf in case Vector RX applied Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 11/16] fm10k: add Vector TX function Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 12/16] fm10k: use func pointer to reset TX queue and mbuf release Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 13/16] fm10k: introduce 2 funcs " Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 14/16] fm10k: Add function to decide best TX func Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 15/16] fm10k: fix a crash issue in vector RX func Chen Jing D(Mark)
2015-10-27  9:46         ` [dpdk-dev] [PATCH v3 16/16] doc: release notes update for fm10k Vector PMD Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 02/16] fm10k: add vPMD pre-condition check for each RX queue Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 03/16] fm10k: Add a new func to initialize all parameters Chen Jing D(Mark)
2015-10-22 15:57       ` Stephen Hemminger
2015-10-23  8:27         ` Chen, Jing D
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 04/16] fm10k: add func to re-allocate mbuf for RX ring Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 05/16] fm10k: add 2 functions to parse pkt_type and offload flag Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 06/16] fm10k: add Vector RX function Chen Jing D(Mark)
2015-10-27  5:24       ` Liang, Cunming
2015-10-27  5:32         ` Chen, Jing D
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 07/16] fm10k: add func to do Vector RX condition check Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 08/16] fm10k: add Vector RX scatter function Chen Jing D(Mark)
2015-10-27  5:27       ` Liang, Cunming
2015-10-27  5:43         ` Chen, Jing D
2015-10-27  5:55           ` Chen, Jing D
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 09/16] fm10k: add function to decide best RX function Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 10/16] fm10k: add func to release mbuf in case Vector RX applied Chen Jing D(Mark)
2015-10-22  9:44     ` [dpdk-dev] [PATCH v2 11/16] fm10k: add Vector TX function Chen Jing D(Mark)
2015-10-22  9:45     ` [dpdk-dev] [PATCH v2 12/16] fm10k: use func pointer to reset TX queue and mbuf release Chen Jing D(Mark)
2015-10-22  9:45     ` [dpdk-dev] [PATCH v2 13/16] fm10k: introduce 2 funcs " Chen Jing D(Mark)
2015-10-22  9:45     ` [dpdk-dev] [PATCH v2 14/16] fm10k: Add function to decide best TX func Chen Jing D(Mark)
2015-10-22  9:45     ` [dpdk-dev] [PATCH v2 15/16] fm10k: fix a crash issue in vector RX func Chen Jing D(Mark)
2015-10-22  9:45     ` [dpdk-dev] [PATCH v2 16/16] doc: release notes update for fm10k Vector PMD Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 02/14] fm10k: add vPMD pre-condition check for each RX queue Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 03/14] fm10k: Add a new func to initialize all parameters Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 04/14] fm10k: add func to re-allocate mbuf for RX ring Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 05/14] fm10k: add 2 functions to parse pkt_type and offload flag Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 06/14] fm10k: add Vector RX function Chen Jing D(Mark)
2015-09-29 13:14   ` Ananyev, Konstantin
2015-09-29 14:22     ` Bruce Richardson
2015-09-30 13:23       ` Chen, Jing D
2015-09-30 13:18     ` Chen, Jing D
2015-09-29 13:03 ` [dpdk-dev] [PATCH 07/14] fm10k: add func to do Vector RX condition check Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 08/14] fm10k: add Vector RX scatter function Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 09/14] fm10k: add function to decide best RX function Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 10/14] fm10k: add func to release mbuf in case Vector RX applied Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 11/14] fm10k: add Vector TX function Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 12/14] fm10k: use func pointer to reset TX queue and mbuf release Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 13/14] fm10k: introduce 2 funcs " Chen Jing D(Mark)
2015-09-29 13:03 ` [dpdk-dev] [PATCH 14/14] fm10k: Add function to decide best TX func Chen Jing D(Mark)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1446110173-13330-16-git-send-email-jing.d.chen@intel.com \
    --to=jing.d.chen@intel.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).