From: Timothy McDaniel <timothy.mcdaniel@intel.com> To: Jerin Jacob <jerinj@marvell.com> Cc: dev@dpdk.org, erik.g.carrillo@intel.com, gage.eads@intel.com, harry.van.haaren@intel.com, thomas@monjalon.net Subject: [dpdk-dev] [PATCH v11 21/23] event/dlb2: add PMD self-tests Date: Sun, 1 Nov 2020 17:38:01 -0600 Message-ID: <1604273883-15908-22-git-send-email-timothy.mcdaniel@intel.com> (raw) In-Reply-To: <1604273883-15908-1-git-send-email-timothy.mcdaniel@intel.com> Add a variety of self-tests for both ldb and directed ports/queues, as well as configure, start, stop, link, etc... Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com> Reviewed-by: Gage Eads <gage.eads@intel.com> --- app/test/test_eventdev.c | 7 + drivers/event/dlb2/dlb2.c | 1 + drivers/event/dlb2/dlb2_selftest.c | 1524 ++++++++++++++++++++++++++++++++++++ drivers/event/dlb2/meson.build | 3 +- 4 files changed, 1534 insertions(+), 1 deletion(-) create mode 100644 drivers/event/dlb2/dlb2_selftest.c diff --git a/app/test/test_eventdev.c b/app/test/test_eventdev.c index 62019c1..bcfaa53 100644 --- a/app/test/test_eventdev.c +++ b/app/test/test_eventdev.c @@ -1030,6 +1030,12 @@ test_eventdev_selftest_dpaa2(void) return test_eventdev_selftest_impl("event_dpaa2", ""); } +static int +test_eventdev_selftest_dlb2(void) +{ + return test_eventdev_selftest_impl("dlb2_event", ""); +} + REGISTER_TEST_COMMAND(eventdev_common_autotest, test_eventdev_common); REGISTER_TEST_COMMAND(eventdev_selftest_sw, test_eventdev_selftest_sw); REGISTER_TEST_COMMAND(eventdev_selftest_octeontx, @@ -1037,3 +1043,4 @@ REGISTER_TEST_COMMAND(eventdev_selftest_octeontx, REGISTER_TEST_COMMAND(eventdev_selftest_octeontx2, test_eventdev_selftest_octeontx2); REGISTER_TEST_COMMAND(eventdev_selftest_dpaa2, test_eventdev_selftest_dpaa2); +REGISTER_TEST_COMMAND(eventdev_selftest_dlb2, test_eventdev_selftest_dlb2); diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c index e8b4446..86299dd 100644 --- a/drivers/event/dlb2/dlb2.c +++ b/drivers/event/dlb2/dlb2.c @@ -3692,6 +3692,7 @@ dlb2_entry_points_init(struct rte_eventdev *dev) .xstats_get_names = dlb2_eventdev_xstats_get_names, .xstats_get_by_name = dlb2_eventdev_xstats_get_by_name, .xstats_reset = dlb2_eventdev_xstats_reset, + .dev_selftest = test_dlb2_eventdev, }; /* Expose PMD's eventdev interface */ diff --git a/drivers/event/dlb2/dlb2_selftest.c b/drivers/event/dlb2/dlb2_selftest.c new file mode 100644 index 0000000..e300067 --- /dev/null +++ b/drivers/event/dlb2/dlb2_selftest.c @@ -0,0 +1,1524 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2016-2020 Intel Corporation + */ + +#include <stdio.h> +#include <string.h> +#include <stdint.h> +#include <errno.h> +#include <unistd.h> +#include <sys/queue.h> + +#include <rte_memory.h> +#include <rte_memzone.h> +#include <rte_launch.h> +#include <rte_eal.h> +#include <rte_per_lcore.h> +#include <rte_lcore.h> +#include <rte_debug.h> +#include <rte_ethdev.h> +#include <rte_cycles.h> +#include <rte_eventdev.h> +#include <rte_pause.h> + +#include "dlb2_priv.h" +#include "rte_pmd_dlb2.h" + +#define MAX_PORTS 32 +#define MAX_QIDS 32 +#define DEFAULT_NUM_SEQ_NUMS 64 + +static struct rte_mempool *eventdev_func_mempool; +static int evdev; + +struct test { + struct rte_mempool *mbuf_pool; + int nb_qids; +}; + +/* initialization and config */ +static inline int +init(struct test *t, int nb_queues, int nb_ports) +{ + struct rte_event_dev_config config = {0}; + struct rte_event_dev_info info; + int ret; + + memset(t, 0, sizeof(*t)); + + t->mbuf_pool = eventdev_func_mempool; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = nb_queues; + config.nb_event_ports = nb_ports; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) + printf("%d: Error configuring device\n", __LINE__); + + return ret; +} + +static inline int +create_ports(int num_ports) +{ + int i; + + if (num_ports > MAX_PORTS) + return -1; + + for (i = 0; i < num_ports; i++) { + struct rte_event_port_conf conf; + + if (rte_event_port_default_conf_get(evdev, i, &conf)) { + printf("%d: Error querying default port conf\n", + __LINE__); + return -1; + } + + if (rte_event_port_setup(evdev, i, &conf) < 0) { + printf("%d: Error setting up port %d\n", __LINE__, i); + return -1; + } + } + + return 0; +} + +static inline int +create_lb_qids(struct test *t, int num_qids, uint32_t flags) +{ + int i; + + for (i = t->nb_qids; i < t->nb_qids + num_qids; i++) { + struct rte_event_queue_conf conf; + + if (rte_event_queue_default_conf_get(evdev, i, &conf)) { + printf("%d: Error querying default queue conf\n", + __LINE__); + return -1; + } + + conf.schedule_type = flags; + + if (conf.schedule_type == RTE_SCHED_TYPE_PARALLEL) + conf.nb_atomic_order_sequences = 0; + else + conf.nb_atomic_order_sequences = DEFAULT_NUM_SEQ_NUMS; + + if (rte_event_queue_setup(evdev, i, &conf) < 0) { + printf("%d: error creating qid %d\n", __LINE__, i); + return -1; + } + } + + t->nb_qids += num_qids; + if (t->nb_qids > MAX_QIDS) + return -1; + + return 0; +} + +static inline int +create_atomic_qids(struct test *t, int num_qids) +{ + return create_lb_qids(t, num_qids, RTE_SCHED_TYPE_ATOMIC); +} + +/* destruction */ +static inline void +cleanup(void) +{ + int ret = 0; + + rte_event_dev_stop(evdev); + ret = rte_event_dev_close(evdev); + + if (ret) + printf("%d: rte_event_dev_close failed, ret = %d\n", + __LINE__, ret); +}; + +static inline int +enqueue_timeout(uint8_t port_id, struct rte_event *ev, uint64_t tmo_us) +{ + const uint64_t start = rte_get_timer_cycles(); + const uint64_t ticks = (tmo_us * rte_get_timer_hz()) / 1E6; + + while ((rte_get_timer_cycles() - start) < ticks) { + if (rte_event_enqueue_burst(evdev, port_id, ev, 1) == 1) + return 0; + + if (rte_errno != -ENOSPC) { + printf("enqueue_burst returned rte_errno %d\n", + rte_errno); + return -1; + } + } + printf("%s time out\n", __func__); + return -1; +} + +static void +flush(uint8_t id __rte_unused, struct rte_event event, void *arg __rte_unused) +{ + rte_pktmbuf_free(event.mbuf); +} + +static int +test_stop_flush(struct test *t) /* test to check we can properly flush events */ +{ + struct rte_event ev; + uint32_t dequeue_depth; + unsigned int i, count; + uint8_t queue_id; + + ev.op = RTE_EVENT_OP_NEW; + + if (init(t, 2, 1) < 0 || + create_ports(1) < 0 || + create_atomic_qids(t, 2) < 0) { + printf("%d: Error initializing device\n", __LINE__); + return -1; + } + + if (rte_event_port_link(evdev, 0, NULL, NULL, 0) != 2) { + printf("%d: Error linking queues to the port\n", __LINE__); + goto err; + } + + if (rte_event_dev_start(evdev) < 0) { + printf("%d: Error with start call\n", __LINE__); + goto err; + } + + /* Unlink queue 1 so the PMD's stop callback has to cleanup an unlinked + * queue. + */ + queue_id = 1; + + if (rte_event_port_unlink(evdev, 0, &queue_id, 1) != 1) { + printf("%d: Error unlinking queue 1 from port\n", __LINE__); + goto err; + } + + count = rte_mempool_avail_count(t->mbuf_pool); + + if (rte_event_port_attr_get(evdev, + 0, + RTE_EVENT_PORT_ATTR_DEQ_DEPTH, + &dequeue_depth)) { + printf("%d: Error retrieveing dequeue depth\n", __LINE__); + goto err; + } + + /* Send QEs to queue 0 */ + for (i = 0; i < dequeue_depth + 1; i++) { + ev.mbuf = rte_pktmbuf_alloc(t->mbuf_pool); + ev.queue_id = 0; + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + + if (enqueue_timeout(0, &ev, 1000)) { + printf("%d: Error enqueuing events\n", __LINE__); + goto err; + } + } + + /* Send QEs to queue 1 */ + for (i = 0; i < dequeue_depth + 1; i++) { + ev.mbuf = rte_pktmbuf_alloc(t->mbuf_pool); + ev.queue_id = 1; + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + + if (enqueue_timeout(0, &ev, 1000)) { + printf("%d: Error enqueuing events\n", __LINE__); + goto err; + } + } + + /* Now the DLB is scheduling events from the port to the IQ, and at + * least one event should be remaining in each queue. + */ + + if (rte_event_dev_stop_flush_callback_register(evdev, flush, NULL)) { + printf("%d: Error installing the flush callback\n", __LINE__); + goto err; + } + + cleanup(); + + if (count != rte_mempool_avail_count(t->mbuf_pool)) { + printf("%d: Error executing the flush callback\n", __LINE__); + goto err; + } + + if (rte_event_dev_stop_flush_callback_register(evdev, NULL, NULL)) { + printf("%d: Error uninstalling the flush callback\n", __LINE__); + goto err; + } + + return 0; +err: + cleanup(); + return -1; +} + +static int +test_single_link(void) +{ + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + uint8_t queue_id; + int ret; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 2; + config.nb_event_ports = 2; + config.nb_single_link_event_port_queues = 1; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + /* Create a directed port */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + port_conf.event_port_cfg = RTE_EVENT_PORT_CFG_SINGLE_LINK; + + if (rte_event_port_setup(evdev, 0, &port_conf) < 0) { + printf("%d: port 0 setup expected to succeed\n", __LINE__); + goto err; + } + + /* Attempt to create another directed port */ + if (rte_event_port_setup(evdev, 1, &port_conf) == 0) { + printf("%d: port 1 setup expected to fail\n", __LINE__); + goto err; + } + + port_conf.event_port_cfg = 0; + + /* Create a load-balanced port */ + if (rte_event_port_setup(evdev, 1, &port_conf) < 0) { + printf("%d: port 1 setup expected to succeed\n", __LINE__); + goto err; + } + + /* Create a directed queue */ + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + queue_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 0 setup expected to succeed\n", __LINE__); + goto err; + } + + /* Attempt to create another directed queue */ + if (rte_event_queue_setup(evdev, 1, &queue_conf) == 0) { + printf("%d: queue 1 setup expected to fail\n", __LINE__); + goto err; + } + + /* Create a load-balanced queue */ + queue_conf.event_queue_cfg = 0; + + if (rte_event_queue_setup(evdev, 1, &queue_conf) < 0) { + printf("%d: queue 1 setup expected to succeed\n", __LINE__); + goto err; + } + + /* Attempt to link directed and load-balanced resources */ + queue_id = 1; + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) == 1) { + printf("%d: port 0 link expected to fail\n", __LINE__); + goto err; + } + + queue_id = 0; + if (rte_event_port_link(evdev, 1, &queue_id, NULL, 1) == 1) { + printf("%d: port 1 link expected to fail\n", __LINE__); + goto err; + } + + /* Link ports to queues */ + queue_id = 0; + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: port 0 link expected to succeed\n", __LINE__); + goto err; + } + + queue_id = 1; + if (rte_event_port_link(evdev, 1, &queue_id, NULL, 1) != 1) { + printf("%d: port 1 link expected to succeed\n", __LINE__); + goto err; + } + + ret = rte_event_dev_close(evdev); + if (ret) + printf("%d: rte_event_dev_close failed, ret = %d\n", + __LINE__, ret); + + return 0; + +err: + ret = rte_event_dev_close(evdev); + if (ret) + printf("%d: rte_event_dev_close failed, ret = %d\n", + __LINE__, ret); + + return -1; +} + +#define NUM_LDB_PORTS 64 +#define NUM_LDB_QUEUES 32 + +static int +test_info_get(void) +{ + struct rte_event_dev_config config = {0}; + struct rte_event_dev_info info; + int ret; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + if (info.max_event_ports != NUM_LDB_PORTS) { + printf("%d: Got %u ports, expected %u\n", + __LINE__, info.max_event_ports, NUM_LDB_PORTS); + goto err; + } + + if (info.max_event_queues != NUM_LDB_QUEUES) { + printf("%d: Got %u queues, expected %u\n", + __LINE__, info.max_event_queues, NUM_LDB_QUEUES); + goto err; + } + + config.nb_event_ports = info.max_event_ports; + config.nb_event_queues = NUM_LDB_QUEUES + info.max_event_ports / 2; + config.nb_single_link_event_port_queues = info.max_event_ports / 2; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + goto err; + } + + /* The DLB2 PMD only reports load-balanced ports and queues in its + * info_get function. Confirm that these values don't include the + * directed port or queue counts. + */ + + if (info.max_event_ports != NUM_LDB_PORTS) { + printf("%d: Got %u ports, expected %u\n", + __LINE__, info.max_event_ports, NUM_LDB_PORTS); + goto err; + } + + if (info.max_event_queues != NUM_LDB_QUEUES) { + printf("%d: Got %u queues, expected %u\n", + __LINE__, info.max_event_queues, NUM_LDB_QUEUES); + goto err; + } + + ret = rte_event_dev_close(evdev); + if (ret) { + printf("%d: rte_event_dev_close failed, ret = %d\n", + __LINE__, ret); + return -1; + } + return 0; + +err: + ret = rte_event_dev_close(evdev); + if (ret) + printf("%d: rte_event_dev_close failed, ret = %d\n", + __LINE__, ret); + + return -1; +} + +static int +test_reconfiguration_link(void) +{ + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + uint8_t queue_id; + int ret, i; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 2; + config.nb_event_ports = 2; + config.nb_single_link_event_port_queues = 0; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + /* Configure the device with 2 LDB ports and 2 LDB queues */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + /* Configure the ports and queues */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + for (i = 0; i < 2; i++) { + if (rte_event_port_setup(evdev, i, &port_conf) < 0) { + printf("%d: port %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + } + + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + for (i = 0; i < 2; i++) { + if (rte_event_queue_setup(evdev, i, &queue_conf) < 0) { + printf("%d: queue %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Link P0->Q0 and P1->Q1 */ + for (i = 0; i < 2; i++) { + queue_id = i; + + if (rte_event_port_link(evdev, i, &queue_id, NULL, 1) != 1) { + printf("%d: port %d link expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Stop the device */ + rte_event_dev_stop(evdev); + + /* Reconfigure device */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error re-configuring device\n", __LINE__); + return -1; + } + + /* Configure P1 and Q1, leave P0 and Q0 to be configured by the PMD. */ + if (rte_event_port_setup(evdev, 1, &port_conf) < 0) { + printf("%d: port 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_setup(evdev, 1, &queue_conf) < 0) { + printf("%d: queue 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q0 and Q1 */ + for (i = 0; i < 2; i++) { + queue_id = i; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: P0->Q%d link expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Link P1->Q0 and Q1 */ + for (i = 0; i < 2; i++) { + queue_id = i; + + if (rte_event_port_link(evdev, 1, &queue_id, NULL, 1) != 1) { + printf("%d: P1->Q%d link expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Stop the device */ + rte_event_dev_stop(evdev); + + /* Configure device with 2 DIR ports and 2 DIR queues */ + config.nb_single_link_event_port_queues = 2; + + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + /* Configure the ports and queues */ + port_conf.event_port_cfg = RTE_EVENT_PORT_CFG_SINGLE_LINK; + + for (i = 0; i < 2; i++) { + if (rte_event_port_setup(evdev, i, &port_conf) < 0) { + printf("%d: port %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + } + + queue_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + + for (i = 0; i < 2; i++) { + if (rte_event_queue_setup(evdev, i, &queue_conf) < 0) { + printf("%d: queue %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Link P0->Q0 and P1->Q1 */ + for (i = 0; i < 2; i++) { + queue_id = i; + + if (rte_event_port_link(evdev, i, &queue_id, NULL, 1) != 1) { + printf("%d: port %d link expected to succeed\n", + __LINE__, i); + goto err; + } + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Stop the device */ + rte_event_dev_stop(evdev); + + /* Reconfigure device */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error re-configuring device\n", __LINE__); + return -1; + } + + /* Configure P1 and Q0, leave P0 and Q1 to be configured by the PMD. */ + if (rte_event_port_setup(evdev, 1, &port_conf) < 0) { + printf("%d: port 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q1 */ + queue_id = 1; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: P0->Q%d link expected to succeed\n", + __LINE__, i); + goto err; + } + + /* Link P1->Q0 */ + queue_id = 0; + + if (rte_event_port_link(evdev, 1, &queue_id, NULL, 1) != 1) { + printf("%d: P1->Q%d link expected to succeed\n", + __LINE__, i); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + rte_event_dev_stop(evdev); + + config.nb_event_queues = 5; + config.nb_event_ports = 5; + config.nb_single_link_event_port_queues = 1; + + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error re-configuring device\n", __LINE__); + return -1; + } + + for (i = 0; i < config.nb_event_queues - 1; i++) { + port_conf.event_port_cfg = 0; + queue_conf.event_queue_cfg = 0; + + if (rte_event_port_setup(evdev, i, &port_conf) < 0) { + printf("%d: port %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + + if (rte_event_queue_setup(evdev, i, &queue_conf) < 0) { + printf("%d: queue %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + + queue_id = i; + + if (rte_event_port_link(evdev, i, &queue_id, NULL, 1) != 1) { + printf("%d: P%d->Q%d link expected to succeed\n", + __LINE__, i, i); + goto err; + } + } + + port_conf.event_port_cfg = RTE_EVENT_PORT_CFG_SINGLE_LINK; + queue_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + + if (rte_event_port_setup(evdev, i, &port_conf) < 0) { + printf("%d: port %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + + if (rte_event_queue_setup(evdev, i, &queue_conf) < 0) { + printf("%d: queue %d setup expected to succeed\n", + __LINE__, i); + goto err; + } + + queue_id = i; + + if (rte_event_port_link(evdev, i, &queue_id, NULL, 1) != 1) { + printf("%d: P%d->Q%d link expected to succeed\n", + __LINE__, i, i); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Stop the device */ + rte_event_dev_stop(evdev); + + config.nb_event_ports += 1; + + /* Reconfigure device with 1 more load-balanced port */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error re-configuring device\n", __LINE__); + return -1; + } + + port_conf.event_port_cfg = 0; + + /* Configure the new port */ + if (rte_event_port_setup(evdev, config.nb_event_ports - 1, + &port_conf) < 0) { + printf("%d: port 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + cleanup(); + return 0; + +err: + cleanup(); + return -1; +} + +static int +test_load_balanced_traffic(void) +{ + uint64_t timeout; + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + struct rte_event ev; + uint8_t queue_id; + int ret; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 1; + config.nb_event_ports = 1; + config.nb_single_link_event_port_queues = 0; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + /* Configure the device with 1 LDB port and queue */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + /* Configure the ports and queues */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + if (rte_event_port_setup(evdev, 0, &port_conf) < 0) { + printf("%d: port 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q0 */ + queue_id = 0; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: port 0 link expected to succeed\n", + __LINE__); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Enqueue 1 NEW event */ + ev.op = RTE_EVENT_OP_NEW; + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + ev.queue_id = 0; + ev.priority = 0; + ev.u64 = 0; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + /* Dequeue and enqueue 1 FORWARD event */ + timeout = 0xFFFFFFFFF; + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + ev.op = RTE_EVENT_OP_FORWARD; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + /* Dequeue and enqueue 1 RELEASE operation */ + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + ev.op = RTE_EVENT_OP_RELEASE; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + cleanup(); + return 0; + +err: + cleanup(); + return -1; +} + +static int +test_directed_traffic(void) +{ + uint64_t timeout; + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + struct rte_event ev; + uint8_t queue_id; + int ret; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 1; + config.nb_event_ports = 1; + config.nb_single_link_event_port_queues = 1; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + /* Configure the device with 1 DIR port and queue */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + /* Configure the ports and queues */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + port_conf.event_port_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + + if (rte_event_port_setup(evdev, 0, &port_conf) < 0) { + printf("%d: port 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + queue_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q0 */ + queue_id = 0; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: port 0 link expected to succeed\n", + __LINE__); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Enqueue 1 NEW event */ + ev.op = RTE_EVENT_OP_NEW; + ev.queue_id = 0; + ev.priority = 0; + ev.u64 = 0; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + /* Dequeue and enqueue 1 FORWARD event */ + timeout = 0xFFFFFFFFF; + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + if (ev.queue_id != 0) { + printf("%d: invalid dequeued event queue ID (%d)\n", + __LINE__, ev.queue_id); + goto err; + } + + ev.op = RTE_EVENT_OP_FORWARD; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + /* Dequeue and enqueue 1 RELEASE operation */ + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + ev.op = RTE_EVENT_OP_RELEASE; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + + cleanup(); + return 0; + +err: + cleanup(); + return -1; +} + +static int +test_deferred_sched(void) +{ + uint64_t timeout; + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + const int num_events = 128; + struct rte_event ev; + uint8_t queue_id; + int ret, i; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 1; + config.nb_event_ports = 2; + config.nb_single_link_event_port_queues = 0; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + /* Configure the device with 2 LDB ports and 1 queue */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + ret = rte_pmd_dlb2_set_token_pop_mode(evdev, 0, DEFERRED_POP); + if (ret < 0) { + printf("%d: Error setting deferred scheduling\n", __LINE__); + goto err; + } + + ret = rte_pmd_dlb2_set_token_pop_mode(evdev, 1, DEFERRED_POP); + if (ret < 0) { + printf("%d: Error setting deferred scheduling\n", __LINE__); + goto err; + } + + /* Configure the ports and queues */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + port_conf.dequeue_depth = 1; + + if (rte_event_port_setup(evdev, 0, &port_conf) < 0) { + printf("%d: port 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_port_setup(evdev, 1, &port_conf) < 0) { + printf("%d: port 1 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + queue_conf.schedule_type = RTE_SCHED_TYPE_PARALLEL; + queue_conf.nb_atomic_order_sequences = 0; + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q0 and P1->Q0 */ + queue_id = 0; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: port 0 link expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_port_link(evdev, 1, &queue_id, NULL, 1) != 1) { + printf("%d: port 1 link expected to succeed\n", + __LINE__); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + /* Enqueue 128 NEW events */ + ev.op = RTE_EVENT_OP_NEW; + ev.sched_type = RTE_SCHED_TYPE_PARALLEL; + ev.queue_id = 0; + ev.priority = 0; + ev.u64 = 0; + + for (i = 0; i < num_events; i++) { + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + } + + /* Dequeue one event from port 0 */ + timeout = 0xFFFFFFFFF; + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + /* Dequeue (and release) all other events from port 1. Deferred + * scheduling ensures no other events are scheduled to port 0 without a + * subsequent rte_event_dequeue_burst() call. + */ + for (i = 0; i < num_events - 1; i++) { + if (rte_event_dequeue_burst(evdev, 1, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + + ev.op = RTE_EVENT_OP_RELEASE; + + if (rte_event_enqueue_burst(evdev, 1, &ev, 1) != 1) { + printf("%d: RELEASE enqueue expected to succeed\n", + __LINE__); + goto err; + } + } + + cleanup(); + return 0; + +err: + cleanup(); + return -1; +} + +static int +test_delayed_pop(void) +{ + uint64_t timeout; + struct rte_event_dev_config config = {0}; + struct rte_event_queue_conf queue_conf; + struct rte_event_port_conf port_conf; + struct rte_event_dev_info info; + int ret, i, num_events; + struct rte_event ev; + uint8_t queue_id; + + if (rte_event_dev_info_get(evdev, &info)) { + printf("%d: Error querying device info\n", __LINE__); + return -1; + } + + config.nb_event_queues = 1; + config.nb_event_ports = 1; + config.nb_single_link_event_port_queues = 0; + config.nb_event_queue_flows = info.max_event_queue_flows; + config.nb_events_limit = info.max_num_events; + config.nb_event_port_dequeue_depth = info.max_event_port_dequeue_depth; + config.nb_event_port_enqueue_depth = info.max_event_port_enqueue_depth; + config.dequeue_timeout_ns = info.max_dequeue_timeout_ns; + config.event_dev_cfg = RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT; + + /* Configure the device with 1 LDB port and queue */ + ret = rte_event_dev_configure(evdev, &config); + if (ret < 0) { + printf("%d: Error configuring device\n", __LINE__); + return -1; + } + + ret = rte_pmd_dlb2_set_token_pop_mode(evdev, 0, DELAYED_POP); + if (ret < 0) { + printf("%d: Error setting deferred scheduling\n", __LINE__); + goto err; + } + + /* Configure the ports and queues */ + if (rte_event_port_default_conf_get(evdev, 0, &port_conf)) { + printf("%d: Error querying default port conf\n", __LINE__); + goto err; + } + + port_conf.event_port_cfg = RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL; + + if (rte_event_port_setup(evdev, 0, &port_conf) < 0) { + printf("%d: port 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + if (rte_event_queue_default_conf_get(evdev, 0, &queue_conf)) { + printf("%d: Error querying default queue conf\n", __LINE__); + goto err; + } + + if (rte_event_queue_setup(evdev, 0, &queue_conf) < 0) { + printf("%d: queue 0 setup expected to succeed\n", + __LINE__); + goto err; + } + + /* Link P0->Q0 */ + queue_id = 0; + + if (rte_event_port_link(evdev, 0, &queue_id, NULL, 1) != 1) { + printf("%d: port 0 link expected to succeed\n", + __LINE__); + goto err; + } + + /* Start the device */ + if (rte_event_dev_start(evdev) < 0) { + printf("%d: device start failed\n", __LINE__); + goto err; + } + + num_events = 2 * port_conf.dequeue_depth; + + /* Enqueue 2 * dequeue_depth NEW events */ + ev.op = RTE_EVENT_OP_NEW; + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + ev.queue_id = 0; + ev.priority = 0; + ev.u64 = 0; + + for (i = 0; i < num_events; i++) { + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: NEW enqueue expected to succeed\n", + __LINE__); + goto err; + } + } + + /* Dequeue dequeue_depth events but only release dequeue_depth - 2. + * Delayed pop won't perform the pop and no more events will be + * scheduled. + */ + timeout = 0xFFFFFFFFF; + + for (i = 0; i < port_conf.dequeue_depth; i++) { + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + } + + ev.op = RTE_EVENT_OP_RELEASE; + + for (i = 0; i < port_conf.dequeue_depth - 2; i++) { + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: RELEASE enqueue expected to succeed\n", + __LINE__); + goto err; + } + } + + timeout = 0x10000; + + ret = rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout); + if (ret != 0) { + printf("%d: event dequeue expected to fail (ret = %d)\n", + __LINE__, ret); + goto err; + } + + /* Release one more event. This will trigger the token pop, and + * dequeue_depth - 1 more events will be scheduled to the device. + */ + ev.op = RTE_EVENT_OP_RELEASE; + + if (rte_event_enqueue_burst(evdev, 0, &ev, 1) != 1) { + printf("%d: RELEASE enqueue expected to succeed\n", + __LINE__); + goto err; + } + + timeout = 0xFFFFFFFFF; + + for (i = 0; i < port_conf.dequeue_depth - 1; i++) { + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 1) { + printf("%d: event dequeue expected to succeed\n", + __LINE__); + goto err; + } + } + + timeout = 0x10000; + + if (rte_event_dequeue_burst(evdev, 0, &ev, 1, timeout) != 0) { + printf("%d: event dequeue expected to fail\n", + __LINE__); + goto err; + } + + cleanup(); + return 0; + +err: + cleanup(); + return -1; +} + +static int +do_selftest(void) +{ + struct test t; + int ret; + + /* Only create mbuf pool once, reuse for each test run */ + if (!eventdev_func_mempool) { + eventdev_func_mempool = + rte_pktmbuf_pool_create("EVENTDEV_DLB2_ST_POOL", + (1 << 12), /* 4k buffers */ + 32 /*MBUF_CACHE_SIZE*/, + 0, + 512, /* use very small mbufs */ + rte_socket_id()); + if (!eventdev_func_mempool) { + printf("ERROR creating mempool\n"); + goto test_fail; + } + } + t.mbuf_pool = eventdev_func_mempool; + + printf("*** Running Stop Flush test...\n"); + ret = test_stop_flush(&t); + if (ret != 0) { + printf("ERROR - Stop Flush test FAILED.\n"); + return ret; + } + + printf("*** Running Single Link test...\n"); + ret = test_single_link(); + if (ret != 0) { + printf("ERROR - Single Link test FAILED.\n"); + + goto test_fail; + } + + printf("*** Running Info Get test...\n"); + ret = test_info_get(); + if (ret != 0) { + printf("ERROR - Stop Flush test FAILED.\n"); + return ret; + } + + printf("*** Running Reconfiguration Link test...\n"); + ret = test_reconfiguration_link(); + if (ret != 0) { + printf("ERROR - Reconfiguration Link test FAILED.\n"); + + goto test_fail; + } + + printf("*** Running Load-Balanced Traffic test...\n"); + ret = test_load_balanced_traffic(); + if (ret != 0) { + printf("ERROR - Load-Balanced Traffic test FAILED.\n"); + + goto test_fail; + } + + printf("*** Running Directed Traffic test...\n"); + ret = test_directed_traffic(); + if (ret != 0) { + printf("ERROR - Directed Traffic test FAILED.\n"); + + goto test_fail; + } + + printf("*** Running Deferred Scheduling test...\n"); + ret = test_deferred_sched(); + if (ret != 0) { + printf("ERROR - Deferred Scheduling test FAILED.\n"); + + goto test_fail; + } + + printf("*** Running Delayed Pop test...\n"); + ret = test_delayed_pop(); + if (ret != 0) { + printf("ERROR - Delayed Pop test FAILED.\n"); + + goto test_fail; + } + + return 0; + +test_fail: + return -1; +} + +int +test_dlb2_eventdev(void) +{ + const char *dlb2_eventdev_name = "dlb2_event"; + uint8_t num_evdevs = rte_event_dev_count(); + int i, ret = 0; + int found = 0, skipped = 0, passed = 0, failed = 0; + struct rte_event_dev_info info; + + for (i = 0; found + skipped < num_evdevs && i < RTE_EVENT_MAX_DEVS; + i++) { + ret = rte_event_dev_info_get(i, &info); + if (ret < 0) + continue; + + /* skip non-dlb2 event devices */ + if (strncmp(info.driver_name, dlb2_eventdev_name, + sizeof(*info.driver_name)) != 0) { + skipped++; + continue; + } + + evdev = rte_event_dev_get_dev_id(info.driver_name); + if (evdev < 0) { + printf("Could not get dev_id for eventdev with name %s, i=%d\n", + info.driver_name, i); + skipped++; + continue; + } + found++; + printf("Running selftest on eventdev %s\n", info.driver_name); + ret = do_selftest(); + if (ret == 0) { + passed++; + printf("Selftest passed for eventdev %s\n", + info.driver_name); + } else { + failed++; + printf("Selftest failed for eventdev %s, err=%d\n", + info.driver_name, ret); + } + } + + printf("Ran selftest on %d eventdevs, %d skipped, %d passed, %d failed\n", + found, skipped, passed, failed); + return ret; +} diff --git a/drivers/event/dlb2/meson.build b/drivers/event/dlb2/meson.build index 2af72e2..bcda3dd 100644 --- a/drivers/event/dlb2/meson.build +++ b/drivers/event/dlb2/meson.build @@ -14,7 +14,8 @@ sources = files('dlb2.c', 'pf/dlb2_main.c', 'pf/dlb2_pf.c', 'pf/base/dlb2_resource.c', - 'rte_pmd_dlb2.c' + 'rte_pmd_dlb2.c', + 'dlb2_selftest.c' ) headers = files('rte_pmd_dlb2.h') -- 2.6.4
next prev parent reply other threads:[~2020-11-01 23:44 UTC|newest] Thread overview: 366+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-11 20:26 [dpdk-dev] [PATCH 00/22] Add DLB2 PMD Timothy McDaniel 2020-09-11 20:26 ` [dpdk-dev] [PATCH 01/22] event/dlb2: add meson build infrastructure Timothy McDaniel 2020-10-06 15:58 ` Eads, Gage 2020-10-17 18:20 ` [dpdk-dev] [PATCH v2 00/22] Add DLB2 PMD Timothy McDaniel 2020-10-17 18:20 ` [dpdk-dev] [PATCH v2 01/22] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-18 8:48 ` Jerin Jacob 2020-10-19 8:33 ` Bruce Richardson 2020-10-20 15:17 ` McDaniel, Timothy 2020-10-20 15:20 ` Thomas Monjalon 2020-10-20 15:33 ` McDaniel, Timothy 2020-10-20 15:38 ` Bruce Richardson 2020-10-20 15:34 ` Bruce Richardson 2020-10-20 15:43 ` McDaniel, Timothy 2020-10-21 16:33 ` McDaniel, Timothy 2020-10-20 14:07 ` McDaniel, Timothy 2020-10-19 9:59 ` Kinsella, Ray 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 00/23] Add DLB2 PMD Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-30 9:43 ` [dpdk-dev] [PATCH v5 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-30 10:01 ` [dpdk-dev] [PATCH v5 00/23] Add DLB2 PMD Thomas Monjalon 2020-10-30 10:16 ` McDaniel, Timothy 2020-10-30 10:32 ` Jerin Jacob 2020-10-30 10:43 ` Thomas Monjalon 2020-10-30 11:58 ` McDaniel, Timothy 2020-10-30 13:15 ` Thomas Monjalon 2020-10-30 15:35 ` McDaniel, Timothy 2020-10-30 15:47 ` Thomas Monjalon 2020-10-30 16:02 ` McDaniel, Timothy 2020-10-30 16:42 ` Thomas Monjalon 2020-10-30 14:21 ` Jerin Jacob 2020-10-30 15:25 ` McDaniel, Timothy 2020-10-30 15:31 ` Jerin Jacob 2020-10-30 16:08 ` Van Haaren, Harry 2020-10-30 16:13 ` McDaniel, Timothy 2020-10-30 15:33 ` David Marchand 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 " Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-30 19:51 ` Eads, Gage 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-30 19:51 ` Eads, Gage 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-30 19:50 ` Eads, Gage 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-30 18:50 ` Eads, Gage 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-30 18:28 ` [dpdk-dev] [PATCH v6 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-30 18:29 ` [dpdk-dev] [PATCH v6 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 00/23] Add DLB2 PMD Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-30 23:51 ` [dpdk-dev] [PATCH v7 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 00/23] Add DLB2 PMD Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-31 9:52 ` Jerin Jacob 2020-10-31 17:13 ` McDaniel, Timothy 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-31 10:51 ` David Marchand 2020-10-31 16:37 ` McDaniel, Timothy 2020-10-31 19:19 ` McDaniel, Timothy 2020-10-31 21:38 ` David Marchand 2020-10-31 21:43 ` McDaniel, Timothy 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-31 2:01 ` [dpdk-dev] [PATCH v8 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-31 17:25 ` [dpdk-dev] [PATCH v9 00/23] Add DLB2 PMD Timothy McDaniel 2020-10-31 17:25 ` [dpdk-dev] [PATCH v9 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-31 17:26 ` [dpdk-dev] [PATCH v9 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 00/23] Add DLB2 PMD Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 09/23] event/dlb2: add xstats Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 13/23] event/dlb2: add port setup Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 14/23] event/dlb2: add port link Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-11-01 20:00 ` [dpdk-dev] [PATCH v10 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-11-01 20:01 ` [dpdk-dev] [PATCH v10 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-11-01 20:01 ` [dpdk-dev] [PATCH v10 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 00/23] Add DLB2 PMD Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 09/23] event/dlb2: add xstats Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 13/23] event/dlb2: add port setup Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 14/23] event/dlb2: add port link Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-11-01 23:37 ` [dpdk-dev] [PATCH v11 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-11-01 23:38 ` [dpdk-dev] [PATCH v11 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-11-01 23:38 ` Timothy McDaniel [this message] 2020-11-01 23:38 ` [dpdk-dev] [PATCH v11 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-11-01 23:38 ` [dpdk-dev] [PATCH v11 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-11-02 8:49 ` [dpdk-dev] [PATCH v11 00/23] Add DLB2 PMD Jerin Jacob 2020-10-17 18:20 ` [dpdk-dev] [PATCH v2 02/22] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-18 8:57 ` Jerin Jacob 2020-10-20 14:08 ` McDaniel, Timothy 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 03/22] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-20 14:01 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 04/22] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 05/22] event/dlb2: add inline functions Timothy McDaniel 2020-10-18 8:59 ` Jerin Jacob 2020-10-20 14:08 ` McDaniel, Timothy 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 06/22] event/dlb2: add probe Timothy McDaniel 2020-10-18 8:39 ` Jerin Jacob 2020-10-20 14:04 ` McDaniel, Timothy 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 07/22] event/dlb2: add xstats Timothy McDaniel 2020-10-20 14:01 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 08/22] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-20 14:01 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 09/22] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-20 14:02 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 10/22] event/dlb2: add queue setup Timothy McDaniel 2020-10-20 14:01 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 11/22] event/dlb2: add port setup Timothy McDaniel 2020-10-20 14:02 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 12/22] event/dlb2: add port link Timothy McDaniel 2020-10-20 14:02 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 13/22] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 14/22] event/dlb2: add eventdev start Timothy McDaniel 2020-10-20 14:04 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 15/22] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 16/22] event/dlb2: add dequeue " Timothy McDaniel 2020-10-20 14:04 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 17/22] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-20 14:04 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 18/22] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-18 9:13 ` Jerin Jacob 2020-10-20 14:12 ` McDaniel, Timothy 2020-10-19 10:01 ` Kinsella, Ray 2020-10-20 14:05 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 19/22] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 20/22] event/dlb2: add queue and port release Timothy McDaniel 2020-10-20 14:04 ` Eads, Gage 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 21/22] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-17 18:21 ` [dpdk-dev] [PATCH v2 22/22] doc: add new DLB2 eventdev driver to relnotes Timothy McDaniel 2020-10-18 9:22 ` Jerin Jacob 2020-10-20 14:13 ` McDaniel, Timothy 2020-10-24 13:06 ` [dpdk-dev] [PATCH v2 00/22] Add DLB2 PMD Thomas Monjalon 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 00/23] " Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-24 12:58 ` Jerin Jacob 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-23 18:30 ` [dpdk-dev] [PATCH v3 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 00/23] Add DLB2 PMD Timothy McDaniel 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 01/23] event/dlb2: add documentation and meson build infrastructure Timothy McDaniel 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 02/23] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 03/23] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-29 15:29 ` Stephen Hemminger 2020-10-29 16:07 ` McDaniel, Timothy 2020-10-29 15:30 ` Stephen Hemminger 2020-10-29 16:10 ` McDaniel, Timothy 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 04/23] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-29 15:24 ` [dpdk-dev] [PATCH v4 05/23] event/dlb2: add inline functions Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 06/23] event/dlb2: add eventdev probe Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 07/23] event/dlb2: add flexible interface Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 08/23] event/dlb2: add probe-time hardware init Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 09/23] event/dlb2: add xstats Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 10/23] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 11/23] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 12/23] event/dlb2: add queue setup Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 13/23] event/dlb2: add port setup Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 14/23] event/dlb2: add port link Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 15/23] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 16/23] event/dlb2: add eventdev start Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 17/23] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 18/23] event/dlb2: add dequeue " Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 19/23] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 20/23] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 21/23] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 22/23] event/dlb2: add queue and port release Timothy McDaniel 2020-10-29 15:25 ` [dpdk-dev] [PATCH v4 23/23] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-09-11 20:26 ` [dpdk-dev] [PATCH 02/22] event/dlb2: add dynamic logging Timothy McDaniel 2020-10-06 16:52 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 03/22] event/dlb2: add private data structures and constants Timothy McDaniel 2020-10-06 16:52 ` Eads, Gage 2020-10-07 16:14 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 04/22] event/dlb2: add definitions shared with LKM or shared code Timothy McDaniel 2020-10-06 19:26 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 05/22] event/dlb2: add inline functions Timothy McDaniel 2020-10-06 21:33 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 06/22] event/dlb2: add probe Timothy McDaniel 2020-10-07 16:56 ` Eads, Gage 2020-10-18 9:05 ` Jerin Jacob 2020-10-20 14:11 ` McDaniel, Timothy 2020-09-11 20:26 ` [dpdk-dev] [PATCH 07/22] event/dlb2: add xstats Timothy McDaniel 2020-09-17 20:58 ` Chen, Mike Ximing 2020-09-17 21:26 ` McDaniel, Timothy 2020-09-18 0:37 ` Chen, Mike Ximing 2020-09-18 8:39 ` Bruce Richardson 2020-10-07 18:47 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 08/22] event/dlb2: add infos get and configure Timothy McDaniel 2020-10-07 19:14 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 09/22] event/dlb2: add queue and port default conf Timothy McDaniel 2020-10-07 19:15 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 10/22] event/dlb2: add queue setup Timothy McDaniel 2020-10-07 19:26 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 11/22] event/dlb2: add port setup Timothy McDaniel 2020-10-07 20:34 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 12/22] event/dlb2: add port link Timothy McDaniel 2020-10-07 20:40 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 13/22] event/dlb2: add port unlink and port unlinks in progress Timothy McDaniel 2020-10-07 20:44 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 14/22] event/dlb2: add eventdev start Timothy McDaniel 2020-10-07 20:51 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 15/22] event/dlb2: add enqueue and its burst variants Timothy McDaniel 2020-10-07 21:02 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 16/22] event/dlb2: add dequeue " Timothy McDaniel 2020-10-07 21:18 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 17/22] event/dlb2: add eventdev stop and close Timothy McDaniel 2020-10-07 21:21 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 18/22] event/dlb2: add PMD's token pop public interface Timothy McDaniel 2020-10-07 21:24 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 19/22] event/dlb2: add PMD self-tests Timothy McDaniel 2020-10-07 21:33 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 20/22] event/dlb2: add queue and port release Timothy McDaniel 2020-10-07 21:55 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 21/22] event/dlb2: add timeout ticks entry point Timothy McDaniel 2020-10-07 21:58 ` Eads, Gage 2020-09-11 20:26 ` [dpdk-dev] [PATCH 22/22] doc: add new DLB2 eventdev driver to relnotes Timothy McDaniel 2020-10-07 22:04 ` Eads, Gage 2020-09-21 17:11 ` [dpdk-dev] [PATCH 00/22] Add DLB2 PMD Jerin Jacob 2020-09-21 17:15 ` McDaniel, Timothy 2020-09-29 18:41 ` Jerin Jacob 2020-09-29 18:46 ` McDaniel, Timothy 2020-09-30 16:10 ` McDaniel, Timothy 2020-09-29 18:46 ` Jerin Jacob 2020-09-30 16:14 ` McDaniel, Timothy
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=1604273883-15908-22-git-send-email-timothy.mcdaniel@intel.com \ --to=timothy.mcdaniel@intel.com \ --cc=dev@dpdk.org \ --cc=erik.g.carrillo@intel.com \ --cc=gage.eads@intel.com \ --cc=harry.van.haaren@intel.com \ --cc=jerinj@marvell.com \ --cc=thomas@monjalon.net \ /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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git