From: Anoob Joseph <anoobj@marvell.com>
To: Jerin Jacob <jerinj@marvell.com>,
Nikhil Rao <nikhil.rao@intel.com>,
"Erik Gabriel Carrillo" <erik.g.carrillo@intel.com>,
Abhinandan Gujjar <abhinandan.gujjar@intel.com>,
Bruce Richardson <bruce.richardson@intel.com>,
Pablo de Lara <pablo.de.lara.guarch@intel.com>
Cc: "Anoob Joseph" <anoobj@marvell.com>,
"Narayana Prasad" <pathreya@marvell.com>,
dev@dpdk.org, "Lukasz Bartosik" <lbartosik@marvell.com>,
"Pavan Nikhilesh" <pbhagavatula@marvell.com>,
"Hemant Agrawal" <hemant.agrawal@nxp.com>,
"Nipun Gupta" <nipun.gupta@nxp.com>,
"Harry van Haaren" <harry.van.haaren@intel.com>,
"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
"Liang Ma" <liang.j.ma@intel.com>
Subject: [dpdk-dev] [PATCH 36/39] examples/l2fwd-event: add eventmode for l2fwd
Date: Mon, 3 Jun 2019 23:02:36 +0530 [thread overview]
Message-ID: <1559583160-13944-37-git-send-email-anoobj@marvell.com> (raw)
In-Reply-To: <1559583160-13944-1-git-send-email-anoobj@marvell.com>
Adding eventmode support in l2fwd. This uses rte_eventmode_helper APIs
to setup and use the eventmode capabilties.
Adding non-burst no Tx internal-port eventmode worker.
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Lukasz Bartosik <lbartosik@marvell.com>
---
examples/l2fwd-event/Makefile | 1 +
examples/l2fwd-event/l2fwd_worker.c | 314 ++++++++++++++++++++++++++++++++++--
examples/l2fwd-event/main.c | 64 ++++++--
examples/l2fwd-event/meson.build | 2 +
4 files changed, 360 insertions(+), 21 deletions(-)
diff --git a/examples/l2fwd-event/Makefile b/examples/l2fwd-event/Makefile
index d6bdb9e..dbb793f 100644
--- a/examples/l2fwd-event/Makefile
+++ b/examples/l2fwd-event/Makefile
@@ -49,6 +49,7 @@ RTE_TARGET ?= x86_64-native-linuxapp-gcc
include $(RTE_SDK)/mk/rte.vars.mk
+CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
diff --git a/examples/l2fwd-event/l2fwd_worker.c b/examples/l2fwd-event/l2fwd_worker.c
index 1a7ee2b..92eae02 100644
--- a/examples/l2fwd-event/l2fwd_worker.c
+++ b/examples/l2fwd-event/l2fwd_worker.c
@@ -25,15 +25,38 @@
#include <rte_branch_prediction.h>
#include <rte_ether.h>
#include <rte_ethdev.h>
+#include <rte_eventdev.h>
+#include <rte_eventmode_helper.h>
+#include <rte_malloc.h>
#include <rte_mbuf.h>
#include "l2fwd_common.h"
#include "l2fwd_worker.h"
+/* Reset eth stats */
+static void
+reset_eth_stats(int is_master_core)
+{
+ int portid;
+
+ /* Only master core need to do this */
+ if (!is_master_core)
+ return;
+
+ /* Reset stats */
+ for (portid = 0; portid < RTE_MAX_ETHPORTS; portid++) {
+ /* skip disabled ports */
+ if ((l2fwd_enabled_port_mask & (1 << portid)) == 0)
+ continue;
+ rte_eth_stats_reset(portid);
+ }
+}
+
/* Print out statistics on packets dropped */
static void
print_stats(void)
{
+ struct rte_eth_stats stats;
uint64_t total_packets_dropped, total_packets_tx, total_packets_rx;
unsigned int portid;
@@ -53,19 +76,21 @@ print_stats(void)
/* skip disabled ports */
if ((l2fwd_enabled_port_mask & (1 << portid)) == 0)
continue;
+ rte_eth_stats_get(portid, &stats);
printf("\nStatistics for port %u ------------------------------"
"\nPackets sent: %24"PRIu64
"\nPackets received: %20"PRIu64
"\nPackets dropped: %21"PRIu64,
portid,
- port_statistics[portid].tx,
- port_statistics[portid].rx,
- port_statistics[portid].dropped);
+ stats.opackets,
+ stats.ipackets,
+ stats.oerrors);
- total_packets_dropped += port_statistics[portid].dropped;
- total_packets_tx += port_statistics[portid].tx;
- total_packets_rx += port_statistics[portid].rx;
+ total_packets_dropped += stats.oerrors;
+ total_packets_tx += stats.opackets;
+ total_packets_rx += stats.ipackets;
}
+
printf("\nAggregate statistics ==============================="
"\nTotal packets sent: %18"PRIu64
"\nTotal packets received: %14"PRIu64
@@ -138,6 +163,16 @@ l2fwd_periodic_drain_stats_monitor(struct lcore_queue_conf *qconf,
}
}
+static inline void
+l2fwd_drain_loop(struct lcore_queue_conf *qconf, struct tsc_tracker *t,
+ int is_master_core)
+{
+ while (!force_quit) {
+ /* Do periodic operations (buffer drain & stats monitor) */
+ l2fwd_periodic_drain_stats_monitor(qconf, t, is_master_core);
+ }
+}
+
static void
l2fwd_mac_updating(struct rte_mbuf *m, unsigned int dest_portid)
{
@@ -180,9 +215,40 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned int portid)
l2fwd_send_pkt(m, dst_port);
}
-/* main processing loop */
+static inline void
+l2fwd_event_pre_forward(struct rte_event *ev, unsigned int portid)
+{
+ unsigned int dst_port;
+ struct rte_mbuf *m;
+
+ /* Get the mbuf */
+ m = ev->mbuf;
+
+ /* Get the destination port from the tables */
+ dst_port = l2fwd_dst_ports[portid];
+
+ /* Save the destination port in the mbuf */
+ m->port = dst_port;
+
+ /* Use tx queue 0 */
+ rte_event_eth_tx_adapter_txq_set(m, 0);
+
+ /* Perform work */
+ if (mac_updating)
+ l2fwd_mac_updating(m, dst_port);
+}
+
+static inline void
+l2fwd_event_switch_to_tx_queue(struct rte_event *ev, uint8_t tx_queue_id)
+{
+ ev->event_type = RTE_EVENT_TYPE_CPU;
+ ev->op = RTE_EVENT_OP_FORWARD;
+ ev->queue_id = tx_queue_id;
+}
+
+/* poll mode processing loop */
static void
-l2fwd_main_loop(void)
+l2fwd_poll_mode_worker(void)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
struct rte_mbuf *m;
@@ -242,9 +308,237 @@ l2fwd_main_loop(void)
}
}
+/*
+ * Event mode exposes various operating modes depending on the
+ * capabilities of the event device and the operating mode
+ * selected.
+ */
+
+/* Workers registered */
+#define L2FWD_EVENTMODE_WORKERS 1
+
+/*
+ * Event mode worker
+ * Operating mode : non-burst no internal port (regular tx worker)
+ */
+static void
+l2fwd_eventmode_non_burst_no_internal_port(void *args)
+{
+ struct rte_event ev;
+ struct rte_mbuf *pkt;
+ struct rte_eventmode_helper_conf *mode_conf;
+ struct rte_eventmode_helper_event_link_info *links = NULL;
+ unsigned int lcore_nb_link = 0;
+ uint32_t lcore_id;
+ unsigned int i, nb_rx = 0;
+ unsigned int portid;
+ struct lcore_queue_conf *qconf;
+ int is_master_core;
+ struct tsc_tracker tsc = {0};
+ uint8_t tx_queue;
+
+ /* Get core ID */
+ lcore_id = rte_lcore_id();
+
+ RTE_LOG(INFO, L2FWD,
+ "Launching event mode non-burst worker no internal port "
+ "(regular tx worker) on lcore %d\n", lcore_id);
+
+ /* Set the flag if master core */
+ is_master_core = (lcore_id == rte_get_master_lcore()) ? 1 : 0;
+
+ /* Get qconf for this core */
+ qconf = &lcore_queue_conf[lcore_id];
+
+ /* Set drain tsc */
+ tsc.drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) /
+ US_PER_S * BURST_TX_DRAIN_US;
+
+ /* Mode conf will be passed as args */
+ mode_conf = (struct rte_eventmode_helper_conf *)args;
+
+ /* Get the links configured for this lcore */
+ lcore_nb_link = rte_eventmode_helper_get_event_lcore_links(lcore_id,
+ mode_conf, &links);
+
+ /* Check if we have links registered for this lcore */
+ if (lcore_nb_link == 0) {
+ /* No links registered. The core could do periodic drains */
+ l2fwd_drain_loop(qconf, &tsc, is_master_core);
+ goto clean_and_exit;
+ }
+
+ /* We have valid links */
+
+ /* Reset stats before proceeding */
+ reset_eth_stats(is_master_core);
+
+ /*
+ * There is no internal port between ethdev and eventdev. So the worker
+ * thread needs to submit event to a designated tx queue. Internally
+ * eth core would receive events from multiple worker threads and send
+ * out packets on wire.
+ */
+ tx_queue = rte_eventmode_helper_get_tx_queue(mode_conf,
+ links[0].eventdev_id);
+ /* See if it's single link */
+ if (lcore_nb_link == 1)
+ goto single_link_loop;
+ else
+ goto multi_link_loop;
+
+single_link_loop:
+
+ RTE_LOG(INFO, L2FWD, " -- lcoreid=%u event_port_id=%u\n", lcore_id,
+ links[0].event_portid);
+
+ while (!force_quit) {
+
+ /* Do periodic operations (buffer drain & stats monitor) */
+ l2fwd_periodic_drain_stats_monitor(qconf, &tsc, is_master_core);
+
+ /* Read packet from event queues */
+ nb_rx = rte_event_dequeue_burst(links[0].eventdev_id,
+ links[0].event_portid,
+ &ev, /* events */
+ 1, /* nb_events */
+ 0 /* timeout_ticks */);
+
+ if (nb_rx == 0)
+ continue;
+
+ portid = ev.queue_id;
+ port_statistics[portid].rx++;
+ pkt = ev.mbuf;
+
+ rte_prefetch0(rte_pktmbuf_mtod(pkt, void *));
+
+ /* Process packet */
+ l2fwd_event_pre_forward(&ev, portid);
+
+ /*
+ * Internal port is not available, the packet needs
+ * to be enqueued to the designated event queue.
+ */
+
+ /* Prepare event for submission to tx event queue */
+ l2fwd_event_switch_to_tx_queue(&ev, tx_queue);
+
+ /* Submit the updated event for tx stage */
+ rte_event_enqueue_burst(links[0].eventdev_id,
+ links[0].event_portid,
+ &ev, /* events */
+ 1 /* nb_events */);
+ }
+ goto clean_and_exit;
+
+multi_link_loop:
+
+ for (i = 0; i < lcore_nb_link; i++) {
+ RTE_LOG(INFO, L2FWD, " -- lcoreid=%u event_port_id=%u\n",
+ lcore_id, links[i].event_portid);
+ }
+
+ while (!force_quit) {
+
+ /* Do periodic operations (buffer drain & stats monitor) */
+ l2fwd_periodic_drain_stats_monitor(qconf, &tsc, is_master_core);
+
+ for (i = 0; i < lcore_nb_link; i++) {
+ /* Read packet from event queues */
+ nb_rx = rte_event_dequeue_burst(links[i].eventdev_id,
+ links[i].event_portid,
+ &ev, /* events */
+ 1, /* nb_events */
+ 0 /* timeout_ticks */);
+
+ if (nb_rx == 0)
+ continue;
+
+ portid = ev.queue_id;
+ port_statistics[portid].rx++;
+ pkt = ev.mbuf;
+
+ rte_prefetch0(rte_pktmbuf_mtod(pkt, void *));
+
+ /* Process packet */
+ l2fwd_event_pre_forward(&ev, portid);
+
+ /*
+ * Internal port is not available, the packet needs
+ * to be enqueued to the designated event queue.
+ */
+
+ /* Prepare event for submission to tx event queue */
+ l2fwd_event_switch_to_tx_queue(&ev, tx_queue);
+
+ /* Submit the updated event for tx stage */
+ rte_event_enqueue_burst(links[i].eventdev_id,
+ links[i].event_portid,
+ &ev, /* events */
+ 1 /* nb_events */);
+ }
+ }
+ goto clean_and_exit;
+
+clean_and_exit:
+ if (links != NULL)
+ rte_free(links);
+}
+
+static uint8_t
+l2fwd_eventmode_populate_wrkr_params(
+ struct rte_eventmode_helper_app_worker_params *wrkrs)
+{
+ uint8_t nb_wrkr_param = 0;
+ struct rte_eventmode_helper_app_worker_params *wrkr;
+
+ /* Save workers */
+ wrkr = wrkrs;
+
+ /* Non-burst no internal port (regular tx worker) */
+ wrkr->cap.burst = RTE_EVENTMODE_HELPER_RX_TYPE_NON_BURST;
+ wrkr->cap.tx_internal_port =
+ RTE_EVENTMODE_HELPER_TX_TYPE_NO_INTERNAL_PORT;
+ wrkr->worker_thread = l2fwd_eventmode_non_burst_no_internal_port;
+
+ nb_wrkr_param++;
+ return nb_wrkr_param;
+}
+
+static void
+l2fwd_eventmode_worker(struct rte_eventmode_helper_conf *mode_conf)
+{
+ struct rte_eventmode_helper_app_worker_params
+ l2fwd_wrkr[L2FWD_EVENTMODE_WORKERS] = {
+ {{{0} }, NULL } };
+ uint8_t nb_wrkr_param;
+
+ /* Populate l2fwd_wrkr params */
+ nb_wrkr_param = l2fwd_eventmode_populate_wrkr_params(l2fwd_wrkr);
+
+ /*
+ * The helper function will launch the correct worker after checking the
+ * event device's capabilities.
+ */
+ rte_eventmode_helper_launch_worker(mode_conf, l2fwd_wrkr,
+ nb_wrkr_param);
+}
+
int
-l2fwd_launch_one_lcore(__attribute__((unused)) void *dummy)
+l2fwd_launch_one_lcore(void *args)
{
- l2fwd_main_loop();
+ struct rte_eventmode_helper_conf *mode_conf;
+
+ mode_conf = (struct rte_eventmode_helper_conf *)args;
+
+ if (mode_conf->mode == RTE_EVENTMODE_HELPER_PKT_TRANSFER_MODE_POLL) {
+ /* App is initialized to run in poll mode */
+ l2fwd_poll_mode_worker();
+ } else if (mode_conf->mode ==
+ RTE_EVENTMODE_HELPER_PKT_TRANSFER_MODE_EVENT) {
+ /* App is initialized to run in event mode */
+ l2fwd_eventmode_worker(mode_conf);
+ }
return 0;
}
diff --git a/examples/l2fwd-event/main.c b/examples/l2fwd-event/main.c
index 4e83b41..62228e6 100644
--- a/examples/l2fwd-event/main.c
+++ b/examples/l2fwd-event/main.c
@@ -39,6 +39,7 @@
#include <rte_ethdev.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
+#include <rte_eventmode_helper.h>
#include "l2fwd_common.h"
#include "l2fwd_worker.h"
@@ -68,6 +69,8 @@ l2fwd_usage(const char *prgname)
" [-q NQ]",
prgname);
+ rte_eventmode_helper_print_options_list();
+
fprintf(stderr, "\n\n");
fprintf(stderr,
@@ -78,7 +81,9 @@ l2fwd_usage(const char *prgname)
" When enabled:\n"
" - The source MAC address is replaced by the TX port MAC address\n"
" - The destination MAC address is replaced by 02:00:00:00:00:TX_PORT_ID\n"
- "\n");
+ "");
+
+ rte_eventmode_helper_print_options_description();
}
static int
@@ -158,12 +163,14 @@ static const struct option lgopts[] = {
/* Parse the argument given in the command line of the application */
static int
-l2fwd_parse_args(int argc, char **argv)
+l2fwd_parse_args(int argc, char **argv,
+ struct rte_eventmode_helper_conf **mode_conf)
{
- int opt, ret, timer_secs;
+ int opt, timer_secs;
char **argvopt;
int option_index;
char *prgname = argv[0];
+ int options_parsed = 0;
argvopt = argv;
@@ -212,12 +219,31 @@ l2fwd_parse_args(int argc, char **argv)
}
}
- if (optind >= 0)
- argv[optind-1] = prgname;
+ /* Update argc & argv to move to event mode options */
+ options_parsed = optind-1;
+ argc -= options_parsed;
+ argv += options_parsed;
- ret = optind-1;
- optind = 1; /* reset getopt lib */
- return ret;
+ /* Reset getopt lib */
+ optind = 1;
+
+ /* Check for event mode parameters and get the conf prepared*/
+ *mode_conf = rte_eventmode_helper_parse_args(argc, argv);
+ if (*mode_conf == NULL) {
+ l2fwd_usage(prgname);
+ return -1;
+ }
+
+ /* Add the number of options parsed */
+ options_parsed += optind-1;
+
+ if (options_parsed >= 0)
+ argv[options_parsed] = prgname;
+
+ /* Reset getopt lib */
+ optind = 1;
+
+ return options_parsed;
}
/* Check the link status of all ports in up to 9s, and print them finally */
@@ -315,6 +341,7 @@ main(int argc, char **argv)
unsigned int nb_ports_in_mask = 0;
unsigned int nb_lcores = 0;
unsigned int nb_mbufs;
+ struct rte_eventmode_helper_conf *mode_conf = NULL;
/* Set default values for global vars */
l2fwd_init_global_vars();
@@ -329,8 +356,12 @@ main(int argc, char **argv)
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
- /* parse application arguments (after the EAL ones) */
- ret = l2fwd_parse_args(argc, argv);
+ /*
+ * Parse application arguments (after the EAL ones). This would parse
+ * the event mode options too, and would set the conf pointer
+ * accordingly.
+ */
+ ret = l2fwd_parse_args(argc, argv, &mode_conf);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Invalid L2FWD arguments\n");
@@ -519,9 +550,20 @@ main(int argc, char **argv)
check_all_ports_link_status(l2fwd_enabled_port_mask);
+ /*
+ * Set the enabled port mask in helper conf to be used by helper
+ * sub-system. This would be used while intializing devices using
+ * helper sub-system.
+ */
+ mode_conf->eth_portmask = l2fwd_enabled_port_mask;
+
+ /* Initialize eventmode components */
+ rte_eventmode_helper_initialize_devs(mode_conf);
+
ret = 0;
/* launch per-lcore init on every lcore */
- rte_eal_mp_remote_launch(l2fwd_launch_one_lcore, NULL, CALL_MASTER);
+ rte_eal_mp_remote_launch(l2fwd_launch_one_lcore, (void *)mode_conf,
+ CALL_MASTER);
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
if (rte_eal_wait_lcore(lcore_id) < 0) {
ret = -1;
diff --git a/examples/l2fwd-event/meson.build b/examples/l2fwd-event/meson.build
index 1d2df49..10e6e66 100644
--- a/examples/l2fwd-event/meson.build
+++ b/examples/l2fwd-event/meson.build
@@ -6,6 +6,8 @@
# To build this example as a standalone application with an already-installed
# DPDK instance, use 'make'
+allow_experimental_apis = true
+deps += ['eventdev']
sources = files(
'l2fwd_worker.c',
'main.c'
--
2.7.4
next prev parent reply other threads:[~2019-06-03 17:40 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 17:32 [dpdk-dev] [PATCH 00/39] adding eventmode helper library Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 01/39] examples/l2fwd-event: create copy of l2fwd Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 02/39] examples/l2fwd-event: move macros to common header Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 03/39] examples/l2fwd-event: move structures " Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 04/39] examples/l2fwd-event: move global vars " Anoob Joseph
2019-06-07 10:02 ` Jerin Jacob Kollanukkaran
2019-06-07 10:45 ` Anoob Joseph
2019-06-07 12:47 ` Jerin Jacob Kollanukkaran
2019-06-03 17:32 ` [dpdk-dev] [PATCH 05/39] examples/l2fwd-event: move dataplane code to new file Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 06/39] examples/l2fwd-event: remove unused header includes Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 07/39] examples/l2fwd-event: move drain buffers to new function Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 08/39] examples/l2fwd-event: optimize check for master core Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 09/39] examples/l2fwd-event: move periodic tasks to new func Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 10/39] examples/l2fwd-event: do timer updates only on master Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 11/39] examples/l2fwd-event: move pkt send code to a new func Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 12/39] examples/l2fwd-event: use fprintf in usage print Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 13/39] examples/l2fwd-event: improvements to the " Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 14/39] eventdev: add files for eventmode helper Anoob Joseph
2019-06-10 10:10 ` Jerin Jacob Kollanukkaran
2019-06-03 17:32 ` [dpdk-dev] [PATCH 15/39] eventdev: add routines for logging " Anoob Joseph
2019-06-10 10:12 ` Jerin Jacob Kollanukkaran
2019-06-17 9:09 ` Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 16/39] eventdev: add eventmode CL options framework Anoob Joseph
2019-06-10 10:19 ` Jerin Jacob Kollanukkaran
2019-06-17 10:14 ` Anoob Joseph
2019-06-11 8:58 ` [dpdk-dev] [EXT] " Sunil Kumar Kori
2019-06-03 17:32 ` [dpdk-dev] [PATCH 17/39] eventdev: allow application to set ethernet portmask Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 18/39] eventdev: add framework for eventmode conf Anoob Joseph
2019-06-10 10:06 ` Jerin Jacob Kollanukkaran
2019-06-20 7:26 ` Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 19/39] eventdev: add common initialize routine for eventmode devs Anoob Joseph
2019-06-10 10:23 ` Jerin Jacob Kollanukkaran
2019-06-17 10:22 ` Anoob Joseph
2019-06-11 8:58 ` [dpdk-dev] [EXT] " Sunil Kumar Kori
2019-06-03 17:32 ` [dpdk-dev] [PATCH 20/39] eventdev: add eventdevice init for eventmode Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 21/39] eventdev: add eventdev port-lcore link Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 22/39] eventdev: add option to specify schedule mode for app stage Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 23/39] eventdev: add placeholder for ethdev init Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 24/39] eventdev: add Rx adapter init in eventmode Anoob Joseph
2019-06-10 14:56 ` Carrillo, Erik G
2019-06-11 3:45 ` [dpdk-dev] [EXT] " Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 25/39] eventdev: add routine to validate conf Anoob Joseph
2019-06-10 10:25 ` Jerin Jacob Kollanukkaran
2019-06-17 10:23 ` Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 26/39] eventdev: add default conf for event devs field in conf Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 27/39] eventdev: add default conf for Rx adapter conf Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 28/39] eventdev: add default conf for event port-lcore link Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 29/39] eventdev: add routines to display the eventmode conf Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 30/39] eventdev: add routine to access eventmode link info Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 31/39] eventdev: add routine to access event queue for eth Tx Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 32/39] eventdev: add routine to launch eventmode workers Anoob Joseph
2019-06-10 14:31 ` Carrillo, Erik G
2019-06-17 10:34 ` [dpdk-dev] [EXT] " Anoob Joseph
2019-06-10 14:46 ` [dpdk-dev] " Carrillo, Erik G
2019-06-27 5:50 ` Anoob Joseph
2019-06-11 8:58 ` [dpdk-dev] [EXT] " Sunil Kumar Kori
2019-06-03 17:32 ` [dpdk-dev] [PATCH 33/39] eventdev: add Tx adapter support Anoob Joseph
2019-06-11 8:58 ` [dpdk-dev] [EXT] " Sunil Kumar Kori
2019-06-03 17:32 ` [dpdk-dev] [PATCH 34/39] eventdev: add support for internal ports Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 35/39] eventdev: display Tx adapter conf Anoob Joseph
2019-06-03 17:32 ` Anoob Joseph [this message]
2019-06-03 17:32 ` [dpdk-dev] [PATCH 37/39] examples/l2fwd-event: add eventmode worker Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 38/39] " Anoob Joseph
2019-06-03 17:32 ` [dpdk-dev] [PATCH 39/39] " Anoob Joseph
2019-06-07 9:48 ` [dpdk-dev] [PATCH 00/39] adding eventmode helper library Jerin Jacob Kollanukkaran
2019-06-11 10:44 ` Mattias Rönnblom
2019-06-14 9:18 ` [dpdk-dev] [EXT] " Anoob Joseph
2019-06-17 13:23 ` Mattias Rönnblom
2019-06-20 3:44 ` Anoob Joseph
[not found] <1559580584-5728-1-git-send-email-anoobj@marvell.com>
2019-06-03 16:49 ` [dpdk-dev] [PATCH 36/39] examples/l2fwd-event: add eventmode for l2fwd Anoob Joseph
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=1559583160-13944-37-git-send-email-anoobj@marvell.com \
--to=anoobj@marvell.com \
--cc=abhinandan.gujjar@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=erik.g.carrillo@intel.com \
--cc=harry.van.haaren@intel.com \
--cc=hemant.agrawal@nxp.com \
--cc=jerinj@marvell.com \
--cc=lbartosik@marvell.com \
--cc=liang.j.ma@intel.com \
--cc=mattias.ronnblom@ericsson.com \
--cc=nikhil.rao@intel.com \
--cc=nipun.gupta@nxp.com \
--cc=pablo.de.lara.guarch@intel.com \
--cc=pathreya@marvell.com \
--cc=pbhagavatula@marvell.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 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).