[dpdk-dev] [PATCH v3 27/29] ethdev: remove forcing stopped state upon close
Thomas Monjalon
thomas at monjalon.net
Tue Sep 29 18:06:37 CEST 2020
29/09/2020 18:01, Ferruh Yigit:
> On 9/29/2020 12:14 AM, Thomas Monjalon wrote:
> > When closing a port, it is supposed to be already stopped,
> > and marked as such with "dev_started" state zeroed.
> >
> > Resetting "dev_started" before calling the driver close operation
> > was hiding the case of not properly stopped port being closed.
> > The flag "dev_started" is not changed anymore in "rte_eth_dev_close()".
> >
> > Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
> > ---
> > lib/librte_ethdev/rte_ethdev.c | 1 -
> > 1 file changed, 1 deletion(-)
> >
> > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> > index d7668114ca..0b8e8e3e8d 100644
> > --- a/lib/librte_ethdev/rte_ethdev.c
> > +++ b/lib/librte_ethdev/rte_ethdev.c
> > @@ -1716,7 +1716,6 @@ rte_eth_dev_close(uint16_t port_id)
> > dev = &rte_eth_devices[port_id];
> >
> > RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_close);
> > - dev->data->dev_started = 0;
> > (*dev->dev_ops->dev_close)(dev);
> >
> > rte_ethdev_trace_close(port_id);
> >
>
> The driver 'remove()' function may be calling the driver 'stop()' dev_ops
> internally, so the device will be stopped properly but the 'dev_started' status
> won't be updated because ethdev API is not called.
If the driver is managing it internally, it should reset the state as well.
> This API assumes device stopped and updates the state accordingly, it is not
> good but removing it also won't be good for the case device already stopped.
>
> What do you think calling 'rte_eth_dev_stop()' from 'rte_eth_dev_close()'?
I think it would be confusing.
Better to let the application and the driver manage "stop"
at their best.
> Although not sure how to handle driver 'remove()' case.
What are you referring to exactly?
More information about the dev
mailing list