All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
To: jerin.jacob@caviumnetworks.com,
	santosh.shukla@caviumnetworks.com, harry.van.haaren@intel.com,
	gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com,
	liang.j.ma@intel.com
Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Subject: [PATCH v4 07/13] app/eventdev: add Tx service setup
Date: Fri, 12 Jan 2018 22:14:10 +0530	[thread overview]
Message-ID: <20180112164416.21374-7-pbhagavatula@caviumnetworks.com> (raw)
In-Reply-To: <20180112164416.21374-1-pbhagavatula@caviumnetworks.com>

Setup one port event port for Tx and link the respective event queue.
Register the Tx function as a service to be called from a service core.
The Tx function dequeues the events from the event queue and transmits
the packet to its respective ethernet port.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 app/test-eventdev/test_pipeline_common.c | 119 +++++++++++++++++++++++++++++++
 app/test-eventdev/test_pipeline_common.h |  19 ++++-
 2 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c
index 63f54daef..98df423ae 100644
--- a/app/test-eventdev/test_pipeline_common.c
+++ b/app/test-eventdev/test_pipeline_common.c
@@ -5,6 +5,58 @@
 
 #include "test_pipeline_common.h"
 
+static int32_t
+pipeline_event_tx_burst_service_func(void *args)
+{
+
+	int i;
+	struct tx_service_data *tx = args;
+	const uint8_t dev = tx->dev_id;
+	const uint8_t port = tx->port_id;
+	struct rte_event ev[BURST_SIZE + 1];
+
+	uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0);
+
+	if (!nb_rx) {
+		for (i = 0; i < tx->nb_ethports; i++)
+			rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]);
+		return 0;
+	}
+
+	for (i = 0; i < nb_rx; i++) {
+		struct rte_mbuf *m = ev[i].mbuf;
+		rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m);
+	}
+	tx->processed_pkts += nb_rx;
+
+	return 0;
+}
+
+static int32_t
+pipeline_event_tx_service_func(void *args)
+{
+
+	int i;
+	struct tx_service_data *tx = args;
+	const uint8_t dev = tx->dev_id;
+	const uint8_t port = tx->port_id;
+	struct rte_event ev;
+
+	uint16_t nb_rx = rte_event_dequeue_burst(dev, port, &ev, 1, 0);
+
+	if (!nb_rx) {
+		for (i = 0; i < tx->nb_ethports; i++)
+			rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]);
+		return 0;
+	}
+
+	struct rte_mbuf *m = ev.mbuf;
+	rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m);
+	tx->processed_pkts++;
+
+	return 0;
+}
+
 int
 pipeline_test_result(struct evt_test *test, struct evt_options *opt)
 {
@@ -151,6 +203,10 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt)
 		}
 
 		t->mt_unsafe |= mt_state;
+		t->tx_service.tx_buf[i] =
+			rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0);
+		if (t->tx_service.tx_buf[i] == NULL)
+			rte_panic("Unable to allocate Tx buffer memory.");
 		rte_eth_promiscuous_enable(i);
 	}
 
@@ -271,12 +327,75 @@ pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride,
 	return ret;
 }
 
+int
+pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options *opt,
+		uint8_t tx_queue_id, uint8_t tx_port_id,
+		const struct rte_event_port_conf p_conf)
+{
+	int ret;
+	struct rte_service_spec serv;
+	struct test_pipeline *t = evt_test_priv(test);
+	struct tx_service_data *tx = &t->tx_service;
+
+	ret = rte_event_port_setup(opt->dev_id, tx_port_id, &p_conf);
+	if (ret) {
+		evt_err("failed to setup port %d", tx_port_id);
+		return ret;
+	}
+
+	if (rte_event_port_link(opt->dev_id, tx_port_id, &tx_queue_id,
+				NULL, 1) != 1) {
+		evt_err("failed to link queues to port %d", tx_port_id);
+		return -EINVAL;
+	}
+
+	tx->dev_id = opt->dev_id;
+	tx->queue_id = tx_queue_id;
+	tx->port_id = tx_port_id;
+	tx->nb_ethports = rte_eth_dev_count();
+	tx->t = t;
+
+	/* Register Tx service */
+	memset(&serv, 0, sizeof(struct rte_service_spec));
+	snprintf(serv.name, sizeof(serv.name), "Tx_service");
+
+	if (evt_has_burst_mode(opt->dev_id))
+		serv.callback = pipeline_event_tx_burst_service_func;
+	else
+		serv.callback = pipeline_event_tx_service_func;
+
+	serv.callback_userdata = (void *)tx;
+	ret = rte_service_component_register(&serv, &tx->service_id);
+	if (ret) {
+		evt_err("failed to register Tx service");
+		return ret;
+	}
+
+	ret = evt_service_setup(tx->service_id);
+	if (ret) {
+		evt_err("Failed to setup service core for Tx service\n");
+		return ret;
+	}
+
+	rte_service_runstate_set(tx->service_id, 1);
+
+	return 0;
+}
+
+
 void
 pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt)
 {
 	int i;
 	RTE_SET_USED(test);
 	RTE_SET_USED(opt);
+	struct test_pipeline *t = evt_test_priv(test);
+
+	if (t->mt_unsafe) {
+		rte_service_component_runstate_set(t->tx_service.service_id, 0);
+		rte_service_runstate_set(t->tx_service.service_id, 0);
+		rte_service_component_unregister(t->tx_service.service_id);
+	}
 
 	for (i = 0; i < rte_eth_dev_count(); i++) {
 		rte_event_eth_rx_adapter_stop(i);
diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h
index f8c46c0d7..acbf688fb 100644
--- a/app/test-eventdev/test_pipeline_common.h
+++ b/app/test-eventdev/test_pipeline_common.h
@@ -19,6 +19,8 @@
 #include <rte_mempool.h>
 #include <rte_prefetch.h>
 #include <rte_spinlock.h>
+#include <rte_service.h>
+#include <rte_service_component.h>
 
 #include "evt_common.h"
 #include "evt_options.h"
@@ -33,6 +35,17 @@ struct worker_data {
 	struct test_pipeline *t;
 } __rte_cache_aligned;
 
+struct tx_service_data {
+	uint8_t dev_id;
+	uint8_t queue_id;
+	uint8_t port_id;
+	uint32_t service_id;
+	uint64_t processed_pkts;
+	uint16_t nb_ethports;
+	struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS];
+	struct test_pipeline *t;
+} __rte_cache_aligned;
+
 struct test_pipeline {
 	/* Don't change the offset of "done". Signal handler use this memory
 	 * to terminate all lcores work.
@@ -45,8 +58,7 @@ struct test_pipeline {
 	uint64_t outstand_pkts;
 	struct rte_mempool *pool;
 	struct worker_data worker[EVT_MAX_PORTS];
-	struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS];
-	rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS];
+	struct tx_service_data tx_service;
 	struct evt_options *opt;
 	uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned;
 } __rte_cache_aligned;
@@ -57,6 +69,9 @@ int pipeline_test_setup(struct evt_test *test, struct evt_options *opt);
 int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt);
 int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride,
 		struct rte_event_port_conf prod_conf);
+int pipeline_event_tx_service_setup(struct evt_test *test,
+		struct evt_options *opt, uint8_t tx_queue_id,
+		uint8_t tx_port_id, const struct rte_event_port_conf p_conf);
 int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt);
 int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt,
 		uint8_t *queue_arr, uint8_t nb_queues,
-- 
2.14.1

  parent reply	other threads:[~2018-01-12 16:45 UTC|newest]

Thread overview: 122+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-30  7:24 [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh
2017-11-30  7:24 ` [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh
2017-12-10 12:31   ` Jerin Jacob
2017-11-30  7:24 ` [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh
2017-11-30 17:15   ` Eads, Gage
2017-12-01  5:19     ` Pavan Nikhilesh Bhagavatula
2017-12-10 12:33   ` Jerin Jacob
2017-12-11 15:20     ` Pavan Nikhilesh Bhagavatula
2017-12-11 15:45       ` Jerin Jacob
2017-11-30  7:24 ` [PATCH 4/4] doc: add perf pipeline test in eventdev test guide Pavan Nikhilesh
2017-12-18 21:43 ` [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh
2017-12-18 21:43   ` [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-08 14:04     ` Jerin Jacob
2017-12-18 21:43   ` [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-08 14:06     ` Jerin Jacob
2017-12-18 21:43   ` [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2017-12-18 21:43   ` [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh
2018-01-08 14:10     ` Jerin Jacob
2017-12-18 21:43   ` [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2017-12-18 21:44   ` [PATCH v2 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2017-12-18 21:44   ` [PATCH v2 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh
2017-12-18 21:44   ` [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2017-12-18 21:44   ` [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-08 14:15     ` Jerin Jacob
2017-12-18 21:44   ` [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2017-12-18 21:44   ` [PATCH v2 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-10 14:51 ` [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 03/12] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-10 16:38     ` Van Haaren, Harry
2018-01-10 20:01       ` Pavan Nikhilesh
2018-01-15 10:17         ` Van Haaren, Harry
2018-01-10 14:51   ` [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-10 16:45     ` Van Haaren, Harry
2018-01-10 16:53       ` Van Haaren, Harry
2018-01-10 20:17         ` Pavan Nikhilesh
2018-01-11 12:17           ` Van Haaren, Harry
2018-01-11 13:52             ` Pavan Nikhilesh
2018-01-11 15:47               ` Van Haaren, Harry
2018-01-10 14:51   ` [PATCH v3 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-10 14:51   ` [PATCH v3 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-12 16:44 ` [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-12 16:44   ` [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-12 16:44   ` [PATCH v4 03/13] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-12 16:44   ` [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-17 17:19       ` Jerin Jacob
2018-01-12 16:44   ` [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-12 16:44   ` Pavan Nikhilesh [this message]
2018-01-16 11:57     ` [PATCH v4 07/13] app/eventdev: add Tx service setup Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 11:57     ` Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 11:58     ` Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 12:05     ` Van Haaren, Harry
2018-01-16 12:31       ` Pavan Nikhilesh
2018-01-12 16:44   ` [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 12:06     ` Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 12:06     ` Van Haaren, Harry
2018-01-12 16:44   ` [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-15 11:16     ` Kovacevic, Marko
2018-01-15 16:16     ` Jerin Jacob
2018-01-16 15:17 ` [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 03/14] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 15:17   ` [PATCH v5 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-16 15:20 ` [PATCH v5 14/14] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-16 15:39 ` [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 03/14] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 15:39   ` [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 15:40   ` [PATCH v6 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 15:40   ` [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 15:40   ` [PATCH v6 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-16 15:40   ` [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-16 16:04     ` Mcnamara, John
2018-01-16 17:51       ` Pavan Nikhilesh
2018-01-16 17:45 ` [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 03/15] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 17:45   ` [PATCH v7 07/15] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 08/15] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 09/15] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 11/15] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 17:46   ` [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide Pavan Nikhilesh
     [not found]     ` <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com>
2018-01-17 17:12       ` Mcnamara, John
2018-01-16 17:46   ` [PATCH v7 14/15] doc: add pipeline atq " Pavan Nikhilesh
     [not found]     ` <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com>
2018-01-17 17:12       ` Mcnamara, John
2018-01-16 17:46   ` [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-17  5:47     ` Fw: " Bhagavatula, Pavan
2018-01-17 17:14       ` Mcnamara, John

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=20180112164416.21374-7-pbhagavatula@caviumnetworks.com \
    --to=pbhagavatula@caviumnetworks.com \
    --cc=dev@dpdk.org \
    --cc=gage.eads@intel.com \
    --cc=harry.van.haaren@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=liang.j.ma@intel.com \
    --cc=nipun.gupta@nxp.com \
    --cc=santosh.shukla@caviumnetworks.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.