On Fri, Sep 22, 2017 at 02:47:14AM +0530, Nikhil Rao wrote: Hi Nikhil,
> Add unit tests for rte_event_eth_rx_adapter_xxx() APIs > > Signed-off-by: Nikhil Rao <nikhil....@intel.com> > --- > test/test/test_event_eth_rx_adapter.c | 399 > ++++++++++++++++++++++++++++++++++ > test/test/Makefile | 1 + > 2 files changed, 400 insertions(+) > create mode 100644 test/test/test_event_eth_rx_adapter.c > > diff --git a/test/test/test_event_eth_rx_adapter.c > b/test/test/test_event_eth_rx_adapter.c > new file mode 100644 > index 000000000..5d448dc27 <snip> > + > +static int > +testsuite_setup(void) > +{ > + int err; > + err = init_ports(rte_eth_dev_count()); > + TEST_ASSERT(err == 0, "Port initialization failed err %d\n", err); > + > + struct rte_event_dev_config config = { > + .nb_event_queues = 1, > + .nb_event_ports = 1, > + .nb_events_limit = 4096, > + .nb_event_queue_flows = 1024, > + .nb_event_port_dequeue_depth = 16, > + .nb_event_port_enqueue_depth = 16 > + }; > + Some eth devices like octeontx[1] use event device to receive packets, So in this special case it would require to stop the event device before configuring the event device as it is already started in port_init. Calling rte_event_dev_stop(0) here would satisfy such use case. [1] http://dpdk.org/ml/archives/dev/2017-August/073982.html > + err = rte_event_dev_configure(0, &config); > + TEST_ASSERT(err == 0, "Event device initialization failed err %d\n", > + err); > + > + err = rte_event_eth_rx_adapter_caps_get(0, 0, &default_params.caps); > + TEST_ASSERT(err == 0, "Failed to get adapter cap err %d\n", <snip> > + > +static int > +adapter_queue_add_del(void) > +{ > + int err; > + struct rte_event ev; > + uint32_t cap; > + > + struct rte_event_eth_rx_adapter_queue_conf queue_config; > + > + err = rte_event_eth_rx_adapter_caps_get(0, 0, &cap); > + TEST_ASSERT(err == 0, "Expected 0 got %d", err); > + > + ev.queue_id = 0; > + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; > + ev.priority = 0; > + > + queue_config.rx_queue_flags = 0; > + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_FLOW_ID)) { > + ev.flow_id = 1; > + queue_config.rx_queue_flags = > + RTE_EVENT_ETH_RX_ADAPTER_QUEUE_FLOW_ID_VALID; > + } > + queue_config.ev = ev; > + queue_config.servicing_weight = 1; > + As mentioned above[1] in case of HW accelerated coprocessors the eth_port has to be stopped before reconfiguring the eth queue to event queue remapping. Calling rte_eth_dev_stop(0) is required before trying to map the eth queue. > + err = rte_event_eth_rx_adapter_queue_add(0, rte_eth_dev_count(), > + -1, &queue_config); > + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); > + > + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_SINGLE_EVENTQ)) { > + err = rte_event_eth_rx_adapter_queue_add(0, 0, 0, > + &queue_config); > + TEST_ASSERT(err == 0, "Expected 0 got %d", err); > + > + err = rte_event_eth_rx_adapter_queue_del(0, 0, 0); > + TEST_ASSERT(err == 0, "Expected 0 got %d", err); > + > + err = rte_event_eth_rx_adapter_queue_add(0, 0, -1, > + &queue_config); > + TEST_ASSERT(err == 0, "Expected 0 got %d", err); > + > + err = rte_event_eth_rx_adapter_queue_del(0, 0, -1); > + TEST_ASSERT(err == 0, "Expected 0 got %d", err); > + } else { > + err = rte_event_eth_rx_adapter_queue_add(0, 0, 0, > + &queue_config); > + TEST_ASSERT(err == -EINVAL, "Expected EINVAL got %d", err); > + > <snip> Thanks, Pavan