[v4,09/24] net/i40e: enable port detach on secondary process
Checks
Commit Message
Previously, detach port on secondary process will mess primary
process and cause same device can't be attached again, by take
advantage of rte_eth_release_port_private, we can support this
with minor change.
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 2 ++
drivers/net/i40e/i40e_ethdev_vf.c | 9 +++++++++
2 files changed, 11 insertions(+)
Comments
On 26/06/2018 08:08, Qi Zhang wrote:
[..]
> static int eth_i40evf_pci_remove(struct rte_pci_device *pci_dev)
> {
> + struct rte_eth_dev *ethdev;
> + ethdev = rte_eth_dev_allocated(pci_dev->device.name);
> +
> + if (!ethdev)
> + return -ENODEV;
> +
> + if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> + return rte_eth_dev_release_port_private(ethdev);
> +
> return rte_eth_dev_pci_generic_remove(pci_dev, i40evf_dev_uninit);
> }
This identical code appears in multiple drivers. Is there anything
stopping it being folded into rte_eth_dev_pci_generic_remove()?
@@ -678,6 +678,8 @@ static int eth_i40e_pci_remove(struct rte_pci_device *pci_dev)
if (!ethdev)
return -ENODEV;
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return rte_eth_dev_release_port_private(ethdev);
if (ethdev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR)
return rte_eth_dev_destroy(ethdev, i40e_vf_representor_uninit);
@@ -1500,6 +1500,15 @@ static int eth_i40evf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
static int eth_i40evf_pci_remove(struct rte_pci_device *pci_dev)
{
+ struct rte_eth_dev *ethdev;
+ ethdev = rte_eth_dev_allocated(pci_dev->device.name);
+
+ if (!ethdev)
+ return -ENODEV;
+
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return rte_eth_dev_release_port_private(ethdev);
+
return rte_eth_dev_pci_generic_remove(pci_dev, i40evf_dev_uninit);
}