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 v2] fm10k: fix a crash bug when quit from testpmd
Date: Tue, 24 Nov 2015 11:10:16 +0800	[thread overview]
Message-ID: <1448334616-14540-1-git-send-email-jing.d.chen@intel.com> (raw)
In-Reply-To: <1447304251-4145-1-git-send-email-jing.d.chen@intel.com>

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

When the fm10k port is closed, both func tx_queue_clean() and
fm10k_tx_queue_release_mbufs_vec() will try to release buffer in
SW ring. The latter func won't do sanity check on those pointers
and cause crash.

The fix removed Vector TX buffer release func since it can share
the release functions with regular TX.

fixes: fb9066e479a6(fm10k: reset and release mbuf)

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Acked-by: Michael Qiu <michael.qiu@intel.com>
---
 drivers/net/fm10k/fm10k.h          |    1 -
 drivers/net/fm10k/fm10k_ethdev.c   |    7 +++----
 drivers/net/fm10k/fm10k_rxtx_vec.c |   28 ----------------------------
 3 files changed, 3 insertions(+), 33 deletions(-)

v2 changes:
 - remove debug info for actual rx/tx func.

diff --git a/drivers/net/fm10k/fm10k.h b/drivers/net/fm10k/fm10k.h
index 754aa6a..38d5489 100644
--- a/drivers/net/fm10k/fm10k.h
+++ b/drivers/net/fm10k/fm10k.h
@@ -237,7 +237,6 @@ struct fm10k_tx_queue {
 };
 
 struct fm10k_txq_ops {
-	void (*release_mbufs)(struct fm10k_tx_queue *txq);
 	void (*reset)(struct fm10k_tx_queue *txq);
 };
 
diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 441f713..7f5c852 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -386,7 +386,6 @@ fm10k_check_mq_mode(struct rte_eth_dev *dev)
 }
 
 static const struct fm10k_txq_ops def_txq_ops = {
-	.release_mbufs = tx_queue_free,
 	.reset = tx_queue_reset,
 };
 
@@ -1073,7 +1072,7 @@ fm10k_dev_queue_release(struct rte_eth_dev *dev)
 		for (i = 0; i < dev->data->nb_tx_queues; i++) {
 			struct fm10k_tx_queue *txq = dev->data->tx_queues[i];
 
-			txq->ops->release_mbufs(txq);
+			tx_queue_free(txq);
 		}
 	}
 
@@ -1761,7 +1760,7 @@ fm10k_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,
 	if (dev->data->tx_queues[queue_id] != NULL) {
 		struct fm10k_tx_queue *txq = dev->data->tx_queues[queue_id];
 
-		txq->ops->release_mbufs(txq);
+		tx_queue_free(txq);
 		dev->data->tx_queues[queue_id] = NULL;
 	}
 
@@ -1836,7 +1835,7 @@ fm10k_tx_queue_release(void *queue)
 	struct fm10k_tx_queue *q = queue;
 	PMD_INIT_FUNC_TRACE();
 
-	q->ops->release_mbufs(q);
+	tx_queue_free(q);
 }
 
 static int
diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c
index 06beca9..6042568 100644
--- a/drivers/net/fm10k/fm10k_rxtx_vec.c
+++ b/drivers/net/fm10k/fm10k_rxtx_vec.c
@@ -45,8 +45,6 @@
 #endif
 
 static void
-fm10k_tx_queue_release_mbufs_vec(struct fm10k_tx_queue *txq);
-static void
 fm10k_reset_tx_queue(struct fm10k_tx_queue *txq);
 
 /* Handling the offload flags (olflags) field takes computation
@@ -634,7 +632,6 @@ fm10k_recv_scattered_pkts_vec(void *rx_queue,
 }
 
 static const struct fm10k_txq_ops vec_txq_ops = {
-	.release_mbufs = fm10k_tx_queue_release_mbufs_vec,
 	.reset = fm10k_reset_tx_queue,
 };
 
@@ -795,31 +792,6 @@ fm10k_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
 }
 
 static void __attribute__((cold))
-fm10k_tx_queue_release_mbufs_vec(struct fm10k_tx_queue *txq)
-{
-	unsigned i;
-	const uint16_t max_desc = (uint16_t)(txq->nb_desc - 1);
-
-	if (txq->sw_ring == NULL || txq->nb_free == max_desc)
-		return;
-
-	/* release the used mbufs in sw_ring */
-	for (i = txq->next_dd - (txq->rs_thresh - 1);
-	     i != txq->next_free;
-	     i = (i + 1) & max_desc)
-		rte_pktmbuf_free_seg(txq->sw_ring[i]);
-
-	txq->nb_free = max_desc;
-
-	/* reset tx_entry */
-	for (i = 0; i < txq->nb_desc; i++)
-		txq->sw_ring[i] = NULL;
-
-	rte_free(txq->sw_ring);
-	txq->sw_ring = NULL;
-}
-
-static void __attribute__((cold))
 fm10k_reset_tx_queue(struct fm10k_tx_queue *txq)
 {
 	static const struct fm10k_tx_desc zeroed_desc = {0};
-- 
1.7.7.6

  parent reply	other threads:[~2015-11-24  3:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-12  4:57 [dpdk-dev] [PATCH] " Chen Jing D(Mark)
2015-11-17 12:03 ` Qiu, Michael
2015-11-23 22:55 ` Thomas Monjalon
2015-11-24  2:20   ` Chen, Jing D
2015-11-24 10:31     ` Thomas Monjalon
2015-11-24  3:10 ` Chen Jing D(Mark) [this message]
2015-11-24 10:39   ` [dpdk-dev] [PATCH v2] " Thomas Monjalon

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=1448334616-14540-1-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).