[dpdk-dev,6/7] event/sw: add selftest to device arguments
Checks
Commit Message
Add selftest as a device argument that can be enabled by suppling
'self_test=1' as a vdev parameter
--vdev="event_sw,self_test=1"
The selftest is run after vdev creation is successfully complete.
Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
drivers/event/sw/Makefile | 2 ++
drivers/event/sw/sw_evdev.c | 23 +++++++++++++++++++++++
drivers/event/sw/sw_evdev.h | 1 +
3 files changed, 26 insertions(+)
@@ -44,6 +44,7 @@ CFLAGS += -Wno-missing-field-initializers
endif
endif
LDLIBS += -lrte_eal -lrte_eventdev -lrte_kvargs -lrte_ring
+LDLIBS += -lrte_mempool -lrte_mbuf
LDLIBS += -lrte_bus_vdev
# library version
@@ -57,6 +58,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV) += sw_evdev.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV) += sw_evdev_worker.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV) += sw_evdev_scheduler.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV) += sw_evdev_xstats.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV) += selftest_sw.c
# export include files
SYMLINK-y-include +=
@@ -47,6 +47,7 @@
#define NUMA_NODE_ARG "numa_node"
#define SCHED_QUANTA_ARG "sched_quanta"
#define CREDIT_QUANTA_ARG "credit_quanta"
+#define SELF_TEST_ARG "self_test"
static void
sw_info_get(struct rte_eventdev *dev, struct rte_event_dev_info *info);
@@ -756,6 +757,13 @@ set_credit_quanta(const char *key __rte_unused, const char *value, void *opaque)
return 0;
}
+static int
+set_self_test(const char *key __rte_unused, const char *value, void *opaque)
+{
+ int *test = opaque;
+ *test = !!atoi(value);
+ return 0;
+}
static int32_t sw_sched_service_func(void *args)
{
@@ -796,6 +804,7 @@ sw_probe(struct rte_vdev_device *vdev)
NUMA_NODE_ARG,
SCHED_QUANTA_ARG,
CREDIT_QUANTA_ARG,
+ SELF_TEST_ARG,
NULL
};
const char *name;
@@ -805,6 +814,7 @@ sw_probe(struct rte_vdev_device *vdev)
int socket_id = rte_socket_id();
int sched_quanta = SW_DEFAULT_SCHED_QUANTA;
int credit_quanta = SW_DEFAULT_CREDIT_QUANTA;
+ int self_test = 0;
name = rte_vdev_device_name(vdev);
params = rte_vdev_device_args(vdev);
@@ -846,6 +856,16 @@ sw_probe(struct rte_vdev_device *vdev)
return ret;
}
+ ret = rte_kvargs_process(kvlist, SELF_TEST_ARG,
+ set_self_test, &self_test);
+ if (ret != 0) {
+ SW_LOG_ERR(
+ "%s: Error parsing self test parameter",
+ name);
+ rte_kvargs_free(kvlist);
+ return ret;
+ }
+
rte_kvargs_free(kvlist);
}
}
@@ -897,6 +917,9 @@ sw_probe(struct rte_vdev_device *vdev)
dev->data->service_inited = 1;
dev->data->service_id = sw->service_id;
+ if (self_test)
+ test_sw_eventdev();
+
return 0;
}
@@ -333,5 +333,6 @@ int sw_xstats_reset(struct rte_eventdev *dev,
const uint32_t ids[],
uint32_t nb_ids);
+void test_sw_eventdev(void);
#endif /* _SW_EVDEV_H_ */