[dpdk-dev] [PATCH v3 29/29] ethdev: allow close function to return an error
Andrew Rybchenko
arybchenko at solarflare.com
Tue Sep 29 13:54:07 CEST 2020
On 9/29/20 2:47 PM, Thomas Monjalon wrote:
> 29/09/2020 13:05, Andrew Rybchenko:
>> On 9/29/20 2:14 AM, Thomas Monjalon wrote:
>>> The API function rte_eth_dev_close() was returning void.
>>> The return type is changed to int for notifying of errors.
>>>
>>> If an error happens during a close operation,
>>> the status of the port is undefined,
>>> a maximum of resources having been freed.
> [...]
>>> @@ -135,7 +135,6 @@ Deprecation Notices
>>> invalid port ID, unsupported operation, failed operation):
>>>
>>> - ``rte_eth_dev_stop``
>>> - - ``rte_eth_dev_close``
>>
>> Many thanks for continuing my unfinished job.
>
> It is not finished.
> Would you take rte_eth_dev_stop?
Sorry, I can't promise that I find time. I'll try.
If anyone else is ready, welcome.
>>> -void
>>> +int
>>> rte_eth_dev_close(uint16_t port_id)
>>> {
>>> struct rte_eth_dev *dev;
>>> + int ret;
>>>
>>> - RTE_ETH_VALID_PORTID_OR_RET(port_id);
>>> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
>>> dev = &rte_eth_devices[port_id];
>>>
>>> - RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_close);
>>> - (*dev->dev_ops->dev_close)(dev);
>>> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);
>>> + ret = (*dev->dev_ops->dev_close)(dev);
>>>
>>> rte_ethdev_trace_close(port_id);
>>> - rte_eth_dev_release_port(dev);
>>> + ret = rte_eth_dev_release_port(dev);
>>
>> It does not look good that it overwrites close return status.
>
> Indeed, it seems I did not finish this patch,
> or maybe I was drunk ;)
>
> What do you think is the best strategy?
> I think we must call rte_eth_dev_release_port()
> even if dev_close returns an error.
> Then which error to return? I would return the first non-zero one.
Yes, exactly. Return the first non-zero error code.
More information about the dev
mailing list