예제 #1
0
int
rte_eth_bond_free(const char *name)
{
	struct rte_eth_dev *eth_dev = NULL;

	/* now free all data allocation - for eth_dev structure,
	 * dummy pci driver and internal (private) data
	 */

	/* find an ethdev entry */
	eth_dev = rte_eth_dev_allocated(name);
	if (eth_dev == NULL)
		return -ENODEV;

	if (eth_dev->data->dev_started == 1) {
		bond_ethdev_stop(eth_dev);
		bond_ethdev_close(eth_dev);
	}

	eth_dev->dev_ops = NULL;
	eth_dev->rx_pkt_burst = NULL;
	eth_dev->tx_pkt_burst = NULL;

	rte_free(eth_dev->pci_dev);
	rte_free(eth_dev->data->dev_private);
	rte_free(eth_dev->data->mac_addrs);

	rte_eth_dev_release_port(eth_dev);

	return 0;
}
int
rte_eth_bond_free(const char *name)
{
	struct rte_eth_dev *eth_dev = NULL;
	struct bond_dev_private *internals;

	/* now free all data allocation - for eth_dev structure,
	 * dummy pci driver and internal (private) data
	 */

	/* find an ethdev entry */
	eth_dev = rte_eth_dev_allocated(name);
	if (eth_dev == NULL)
		return -ENODEV;

	internals = eth_dev->data->dev_private;
	if (internals->slave_count != 0)
		return -EBUSY;

	if (eth_dev->data->dev_started == 1) {
		bond_ethdev_stop(eth_dev);
		bond_ethdev_close(eth_dev);
	}

	eth_dev->dev_ops = NULL;
	eth_dev->rx_pkt_burst = NULL;
	eth_dev->tx_pkt_burst = NULL;

	internals = eth_dev->data->dev_private;
	rte_bitmap_free(internals->vlan_filter_bmp);
	rte_free(internals->vlan_filter_bmpmem);
	rte_free(eth_dev->data->dev_private);
	rte_free(eth_dev->data->mac_addrs);

	rte_eth_dev_release_port(eth_dev);

	return 0;
}