13/02/2020 17:05, Ferruh Yigit: > On 2/13/2020 3:27 PM, Thomas Monjalon wrote: > > 13/02/2020 16:16, Ferruh Yigit: > >> On 2/13/2020 2:33 PM, Thomas Monjalon wrote: > >>> The function rte_eth_dev_release_port() is called by drivers > >>> when closing or removing a device. > >>> Its main usage should be via rte_eth_dev_close() by up-to-date > >>> drivers which are compliant with RTE_ETH_DEV_CLOSE_REMOVE flag. > >>> > >>> When a port is released, the data (rte_eth_dev_data) are cleared, > >>> but the pointers in rte_eth_dev were not cleared. > >>> It may cause issues with code paths trying to use dangling pointers > >>> (e.g. the .device pointer which may reference a removed rte_device). > >>> Everything is now cleared to 0 when releasing. > >>> The state is explicitly set to RTE_ETH_DEV_UNUSED which is 0 anyway. > >>> > >>> Using this patch may reveal bugs in some code paths: > >>> - device pointer must be saved before closing a port if needed > >> > >> Is this saving should be done in application code or will be done by > >> ethdev? > > > > by the application > > From ethdev point of view, when a port is closed, there is nothing more to > > do next. > > > > That sound reasonable from ethdev perspective, but it will push dealing with > rte_device level details to the application. > > Like this change will be forcing each application to store the rte_device > pointer before close(), in case device can be detached later.
Yes I think PMDs could release rte_device when closing the last port of the device. I am not sure what is the benefit of explicit detach. That's something we should discuss, agree and write in the API doc.