net/i40e: fix overwriting RSS RETA
[dpdk.git] / drivers / net / tap / rte_eth_tap.c
index 20ed935..49afd38 100644 (file)
@@ -248,7 +248,7 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive)
        return fd;
 
 error:
-       if (fd > 0)
+       if (fd >= 0)
                close(fd);
        return -1;
 }
@@ -1848,6 +1848,7 @@ disable_rte_flow:
                TAP_LOG(ERR, "Remote feature requires flow support.");
                goto error_exit;
        }
+       rte_eth_dev_probing_finish(dev);
        return 0;
 
 error_remote:
@@ -1858,6 +1859,8 @@ error_remote:
 error_exit:
        if (pmd->ioctl_sock > 0)
                close(pmd->ioctl_sock);
+       /* mac_addrs must not be freed alone because part of dev_private */
+       dev->data->mac_addrs = NULL;
        rte_eth_dev_release_port(dev);
 
 error_exit_nodev:
@@ -2259,8 +2262,11 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev)
        if (!eth_dev)
                return -ENODEV;
 
+       /* mac_addrs must not be freed alone because part of dev_private */
+       eth_dev->data->mac_addrs = NULL;
+
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
-               return rte_eth_dev_release_port_secondary(eth_dev);
+               return rte_eth_dev_release_port(eth_dev);
 
        internals = eth_dev->data->dev_private;
        process_private = eth_dev->process_private;
@@ -2286,7 +2292,6 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev)
        }
 
        close(internals->ioctl_sock);
-       rte_free(eth_dev->data->dev_private);
        rte_free(eth_dev->process_private);
        if (tap_devices_count == 1)
                rte_mp_action_unregister(TAP_MP_KEY);