ethdev: make driver-only headers private
[dpdk.git] / drivers / net / softnic / rte_eth_softnic.c
index 038abd9..99d8468 100644 (file)
@@ -6,8 +6,8 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <rte_ethdev_driver.h>
-#include <rte_ethdev_vdev.h>
+#include <ethdev_driver.h>
+#include <ethdev_vdev.h>
 #include <rte_malloc.h>
 #include <rte_bus_vdev.h>
 #include <rte_kvargs.h>
@@ -178,7 +178,7 @@ pmd_dev_start(struct rte_eth_dev *dev)
        return 0;
 }
 
-static void
+static int
 pmd_dev_stop(struct rte_eth_dev *dev)
 {
        struct pmd_internals *p = dev->data->dev_private;
@@ -199,11 +199,44 @@ pmd_dev_stop(struct rte_eth_dev *dev)
 
        tm_hierarchy_free(p);
        softnic_mtr_free(p);
+
+       return 0;
+}
+
+static void
+pmd_free(struct pmd_internals *p)
+{
+       if (p == NULL)
+               return;
+
+       if (p->params.conn_port)
+               softnic_conn_free(p->conn);
+
+       softnic_thread_free(p);
+       softnic_pipeline_free(p);
+       softnic_table_action_profile_free(p);
+       softnic_port_in_action_profile_free(p);
+       softnic_tap_free(p);
+       softnic_tmgr_free(p);
+       softnic_link_free(p);
+       softnic_swq_free(p);
+       softnic_mempool_free(p);
+
+       tm_hierarchy_free(p);
+       softnic_mtr_free(p);
+
+       rte_free(p);
 }
 
 static int
-pmd_dev_close(struct rte_eth_dev *dev __rte_unused)
+pmd_dev_close(struct rte_eth_dev *dev)
 {
+       if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+               return 0;
+
+       pmd_free(dev->data->dev_private);
+       dev->data->dev_private = NULL; /* already freed */
+       dev->data->mac_addrs = NULL; /* statically allocated */
        return 0;
 }
 
@@ -335,31 +368,6 @@ pmd_init(struct pmd_params *params)
        return p;
 }
 
-static void
-pmd_free(struct pmd_internals *p)
-{
-       if (p == NULL)
-               return;
-
-       if (p->params.conn_port)
-               softnic_conn_free(p->conn);
-
-       softnic_thread_free(p);
-       softnic_pipeline_free(p);
-       softnic_table_action_profile_free(p);
-       softnic_port_in_action_profile_free(p);
-       softnic_tap_free(p);
-       softnic_tmgr_free(p);
-       softnic_link_free(p);
-       softnic_swq_free(p);
-       softnic_mempool_free(p);
-
-       tm_hierarchy_free(p);
-       softnic_mtr_free(p);
-
-       rte_free(p);
-}
-
 static struct rte_ether_addr eth_addr = {
        .addr_bytes = {0},
 };
@@ -652,12 +660,9 @@ pmd_remove(struct rte_vdev_device *vdev)
        /* Find the ethdev entry */
        dev = rte_eth_dev_allocated(rte_vdev_device_name(vdev));
        if (dev == NULL)
-               return -ENODEV;
+               return 0; /* port already released */
 
-       /* Free device data structures*/
-       pmd_free(dev->data->dev_private);
-       dev->data->dev_private = NULL; /* already freed */
-       dev->data->mac_addrs = NULL; /* statically allocated */
+       pmd_dev_close(dev);
        rte_eth_dev_release_port(dev);
 
        return 0;