[dpdk-dev] [RFC 1/1] eventdev: add distributed software (DSW) event device

Jerin Jacob jerin.jacob at caviumnetworks.com
Mon Aug 27 11:40:03 CEST 2018


-----Original Message-----
> Date: Mon, 27 Aug 2018 11:23:59 +0200
> From: Mattias Rönnblom <mattias.ronnblom at ericsson.com>
> To: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> CC: dev at dpdk.org, bruce.richardson at intel.com
> Subject: Re: [dpdk-dev] [RFC 1/1] eventdev: add distributed software (DSW)
>  event device
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
>  Thunderbird/52.9.1
> 
> External Email
> 
> On 2018-07-22 13:32, Jerin Jacob wrote:
> 
> > > +static void
> > > +dsw_stop(struct rte_eventdev *dev __rte_unused)
> > > +{
> > 
> > You may implement, eventdev_stop_flush_t callback to free up the
> > outstanding events in the eventdev.
> > 
> 
> Is this support mandatory, or is it OK to leave it to the user to empty
> the machinery before calling stop in the initial driver version?

This is useful to avoid event buffer leak. The application may call stop()
abruptly or some reason event device cannot provide the event on
dequeue().

Any trivial implementation could be doing dequeue() in the driver on
stop().

> 
> I can't find any other event device supporting the callback.

drivers/event/sw and drivers/event/octeontx/ supports it.

$ grep -r "dev_stop_flush" drivers/event/
drivers/event/octeontx/ssovf_evdev.c:	if (dev->dev_ops->dev_stop_flush != NULL)
drivers/event/octeontx/ssovf_evdev.c: dev->dev_ops->dev_stop_flush(dev->data->dev_id, event,
dev->data->dev_stop_flush_arg);
drivers/event/sw/sw_evdev_selftest.c:dev_stop_flush(struct test *t) /*
test to check we can properly flush events */
drivers/event/sw/sw_evdev_selftest.c:	if
(rte_event_dev_stop_flush_callback_register(evdev, flush, &count)) {
drivers/event/sw/sw_evdev_selftest.c:	if
(rte_event_dev_stop_flush_callback_register(evdev, NULL, NULL)) {
drivers/event/sw/sw_evdev_selftest.c:	ret = dev_stop_flush(t);
drivers/event/sw/sw_evdev.c:	eventdev_stop_flush_t flush;
drivers/event/sw/sw_evdev.c:	flush = dev->dev_ops->dev_stop_flush;
drivers/event/sw/sw_evdev.c:	arg = dev->data->dev_stop_flush_arg;
drivers/event/sw/sw_evdev.c:	eventdev_stop_flush_t flush;
drivers/event/sw/sw_evdev.c:	flush = dev->dev_ops->dev_stop_flush;
drivers/event/sw/sw_evdev.c:	arg = dev->data->dev_stop_flush_arg;

> 
> In DSW, the events can be a little here-and-there - in the output
> buffers, in the pause buffer, and on the input rings.

Any trivial implementation could be doing dequeue() in the driver on
stop().

> 
> That said, assuming the worker lcore threads have stopped using the
> device and issued the appropriate barriers, it should be possible to
> round up the events from the thread running 'rte_event_dev_stop'.


More information about the dev mailing list