[dpdk-dev] [PATCH 21/21] net/softnic: start and stop function

Jasvinder Singh jasvinder.singh at intel.com
Fri Jun 8 14:41:55 CEST 2018


Implements softnic start and stop function.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu at intel.com>
Signed-off-by: Jasvinder Singh <jasvinder.singh at intel.com>
---
 drivers/net/softnic/rte_eth_softnic.c           | 38 ++++++++++++++++++-------
 drivers/net/softnic/rte_eth_softnic_internals.h |  6 ++++
 drivers/net/softnic/rte_eth_softnic_pipeline.c  | 12 ++++++++
 drivers/net/softnic/rte_eth_softnic_swq.c       | 16 +++++++++++
 4 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c
index e91e1cb..58d63cd 100644
--- a/drivers/net/softnic/rte_eth_softnic.c
+++ b/drivers/net/softnic/rte_eth_softnic.c
@@ -142,6 +142,18 @@ pmd_tx_queue_setup(struct rte_eth_dev *dev,
 static int
 pmd_dev_start(struct rte_eth_dev *dev)
 {
+	struct pmd_internals *p = dev->data->dev_private;
+	int status;
+
+	/* Firmware UP */
+	status = cli_script_process(p,
+		p->params.script,
+		conn_params_default.msg_in_len_max,
+		conn_params_default.msg_out_len_max);
+	if (status)
+		return status;
+
+	/* Link UP */
 	dev->data->dev_link.link_status = ETH_LINK_UP;
 
 	return 0;
@@ -150,21 +162,27 @@ pmd_dev_start(struct rte_eth_dev *dev)
 static void
 pmd_dev_stop(struct rte_eth_dev *dev)
 {
+	struct pmd_internals *p = dev->data->dev_private;
+
+	/* Link DOWN */
 	dev->data->dev_link.link_status = ETH_LINK_DOWN;
+
+	/* Firmware DOWN */
+	pipeline_disable_all(p);
+	pipeline_free(p);
+	table_action_profile_free(p);
+	port_in_action_profile_free(p);
+	tap_free(p);
+	tmgr_free(p);
+	link_free(p);
+	swq_free_keep_rxq_txq(p);
+	mempool_free(p);
 }
 
 static void
-pmd_dev_close(struct rte_eth_dev *dev)
+pmd_dev_close(struct rte_eth_dev *dev __rte_unused)
 {
-	uint32_t i;
-
-	/* RX queues */
-	for (i = 0; i < dev->data->nb_rx_queues; i++)
-		rte_ring_free((struct rte_ring *)dev->data->rx_queues[i]);
-
-	/* TX queues */
-	for (i = 0; i < dev->data->nb_tx_queues; i++)
-		rte_ring_free((struct rte_ring *)dev->data->tx_queues[i]);
+	return;
 }
 
 static int
diff --git a/drivers/net/softnic/rte_eth_softnic_internals.h b/drivers/net/softnic/rte_eth_softnic_internals.h
index 4d09a63..83b0c54 100644
--- a/drivers/net/softnic/rte_eth_softnic_internals.h
+++ b/drivers/net/softnic/rte_eth_softnic_internals.h
@@ -550,6 +550,9 @@ swq_init(struct pmd_internals *p);
 void
 swq_free(struct pmd_internals *p);
 
+void
+swq_free_keep_rxq_txq(struct pmd_internals *p);
+
 struct swq *
 swq_find(struct pmd_internals *p,
 	const char *name);
@@ -672,6 +675,9 @@ pipeline_init(struct pmd_internals *p);
 void
 pipeline_free(struct pmd_internals *p);
 
+void
+pipeline_disable_all(struct pmd_internals *p);
+
 struct pipeline *
 pipeline_find(struct pmd_internals *p, const char *name);
 
diff --git a/drivers/net/softnic/rte_eth_softnic_pipeline.c b/drivers/net/softnic/rte_eth_softnic_pipeline.c
index 7382288..16fc93b 100644
--- a/drivers/net/softnic/rte_eth_softnic_pipeline.c
+++ b/drivers/net/softnic/rte_eth_softnic_pipeline.c
@@ -61,6 +61,18 @@ pipeline_free(struct pmd_internals *p)
 	}
 }
 
+void
+pipeline_disable_all(struct pmd_internals *p)
+{
+	struct pipeline *pipeline;
+
+	TAILQ_FOREACH(pipeline, &p->pipeline_list, node)
+		if (pipeline->enabled)
+			thread_pipeline_disable(p,
+				pipeline->thread_id,
+				pipeline->name);
+}
+
 struct pipeline *
 pipeline_find(struct pmd_internals *p,
 	const char *name)
diff --git a/drivers/net/softnic/rte_eth_softnic_swq.c b/drivers/net/softnic/rte_eth_softnic_swq.c
index d385dd1..e53da92 100644
--- a/drivers/net/softnic/rte_eth_softnic_swq.c
+++ b/drivers/net/softnic/rte_eth_softnic_swq.c
@@ -33,6 +33,22 @@ swq_free(struct pmd_internals *p)
 	}
 }
 
+void
+swq_free_keep_rxq_txq(struct pmd_internals *p)
+{
+	struct swq *swq;
+
+	TAILQ_FOREACH(swq, &p->swq_list, node) {
+		if ((strncmp(swq->name, "RXQ", strlen("RXQ")) == 0) ||
+			(strncmp(swq->name, "TXQ", strlen("TXQ")) == 0))
+			continue;
+
+		TAILQ_REMOVE(&p->swq_list, swq, node);
+		rte_ring_free(swq->r);
+		free(swq);
+	}
+}
+
 struct swq *
 swq_find(struct pmd_internals *p,
 	const char *name)
-- 
2.9.3



More information about the dev mailing list