New upstream version 17.11.3
[deb_dpdk.git] / lib / librte_ether / rte_ethdev_pci.h
index d3bc03c..f69316d 100644 (file)
@@ -36,6 +36,8 @@
 
 #include <rte_malloc.h>
 #include <rte_pci.h>
+#include <rte_bus_pci.h>
+#include <rte_config.h>
 #include <rte_ethdev.h>
 
 /**
@@ -45,9 +47,6 @@
  * The *eth_dev* pointer is the address of the *rte_eth_dev* structure.
  * @param pci_dev
  * The *pci_dev* pointer is the address of the *rte_pci_device* structure.
- *
- * @return
- *   - 0 on success, negative on error
  */
 static inline void
 rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
@@ -69,7 +68,6 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
 
        eth_dev->data->kdrv = pci_dev->kdrv;
        eth_dev->data->numa_node = pci_dev->device.numa_node;
-       eth_dev->data->drv_name = pci_dev->driver->driver.name;
 }
 
 /**
@@ -118,7 +116,6 @@ rte_eth_dev_pci_allocate(struct rte_pci_device *dev, size_t private_data_size)
        }
 
        eth_dev->device = &dev->device;
-       eth_dev->intr_handle = &dev->intr_handle;
        rte_eth_copy_pci_info(eth_dev, dev);
        return eth_dev;
 }
@@ -126,16 +123,22 @@ rte_eth_dev_pci_allocate(struct rte_pci_device *dev, size_t private_data_size)
 static inline void
 rte_eth_dev_pci_release(struct rte_eth_dev *eth_dev)
 {
-       /* free ether device */
-       rte_eth_dev_release_port(eth_dev);
-
        if (rte_eal_process_type() == RTE_PROC_PRIMARY)
                rte_free(eth_dev->data->dev_private);
 
        eth_dev->data->dev_private = NULL;
 
+       /*
+        * Secondary process will check the name to attach.
+        * Clear this field to avoid attaching a released ports.
+        */
+       eth_dev->data->name[0] = '\0';
+
        eth_dev->device = NULL;
        eth_dev->intr_handle = NULL;
+
+       /* free ether device */
+       rte_eth_dev_release_port(eth_dev);
 }
 
 typedef int (*eth_dev_pci_callback_t)(struct rte_eth_dev *eth_dev);