On 9/21/2017 9:13 PM, Pavan Nikhilesh Bhagavatula wrote:
Hi Nikhil,

Few comments Inline

<snip>

 + *  - 0: Success, statistics reset successfully.

Invalid description.

Thanks Pavan, for catching these, will fix.


+ *  - <0: Error code on failure, if the adapter doesn't use a rte_service
+ * function, this function returns -ESRCH.
+ */
+int rte_event_eth_rx_adapter_service_id_get(uint8_t id, uint32_t *service_id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _RTE_EVENT_ETH_RX_ADAPTER_ */
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c 
b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
new file mode 100644
index 000000000..d5b655dae
--- /dev/null
+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
@@ -0,0 +1,1238 @@
<snip>
+
+static int
+rx_adapter_ctrl(uint8_t id, int start)
+{
+       struct rte_event_eth_rx_adapter *rx_adapter;
+       struct rte_eventdev *dev;
+       struct eth_device_info *dev_info;
+       uint32_t i;
+       int use_service = 0;
+       int stop = !start;
+
+       RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL);
+       rx_adapter = id_to_rx_adapter(id);
+       if (!rx_adapter)
+               return -EINVAL;
+
+       dev = &rte_eventdevs[rx_adapter->eventdev_id];
+
+       for (i = 0; i < rte_eth_dev_count(); i++) {
+               dev_info = &rx_adapter->eth_devices[i];
+               /* if start  check for num dev queues */
+               if (start && !dev_info->nb_dev_queues)
+                       continue;
+               /* if stop check if dev has been started */
+               if (stop && !dev_info->dev_rx_started)
+                       continue;:1
+               use_service |= !dev_info->internal_event_port;
+               dev_info->dev_rx_started = start;
+               if (!dev_info->internal_event_port)
+                       continue;
+               start ? (*dev->dev_ops->eth_rx_adapter_start)(dev,
+                                               &rte_eth_devices[i]) :
+                       (*dev->dev_ops->eth_rx_adapter_stop)(dev,
+                                               &rte_eth_devices[i]);
+       }
+
+       if (use_service)

Here setting the service run state is not sufficient we need to enable the
service on a service core calling rte_service_start_with_defaults() should be
sufficient.


Yes it is necessary but insufficient.

IMO,
If the application is controlling core masks, the application flow at startup looks like:

rte_event_eth_rx_adapter_create(id,..)
...
rte_event_eth_rx_adapter_start(id)
if (!rte_event_eth_rx_adapter_service_id_get(id, &service_id)) {
        rte_service_lcore_add(rx_lcore_id);
        rte_service_map_lcore_set(service_id, rx_lcore_id, 1);
        rte_service_lcore_start(rx_lcore_id)
}

Since rte_service_start_with_defaults() is invoked before the adapter is created, how would it get assigned a core etc ?


Nikhil
+               rte_service_runstate_set(rx_adapter->service_id, start);
+
+       return 0;
+}
+
<snip>

Regards,
Pavan


Reply via email to