Beispiel #1
0
int
rte_kni_release(struct rte_kni *kni)
{
	struct rte_kni_device_info dev_info;
	uint32_t slot_id;

	if (!kni || !kni->in_use)
		return -1;

	snprintf(dev_info.name, sizeof(dev_info.name), "%s", kni->name);
	if (ioctl(kni_fd, RTE_KNI_IOCTL_RELEASE, &dev_info) < 0) {
		RTE_LOG(ERR, KNI, "Fail to release kni device\n");
		return -1;
	}

	/* mbufs in all fifo should be released, except request/response */
	kni_free_fifo(kni->tx_q);
	kni_free_fifo(kni->rx_q);
	kni_free_fifo(kni->alloc_q);
	kni_free_fifo(kni->free_q);

	slot_id = kni->slot_id;

	/* Memset the KNI struct */
	memset(kni, 0, sizeof(struct rte_kni));

	/* Release memzone */
	if (slot_id > kni_memzone_pool.max_ifaces) {
		rte_panic("KNI pool: corrupted slot ID: %d, max: %d\n",
			slot_id, kni_memzone_pool.max_ifaces);
	}
	kni_memzone_pool_release(&kni_memzone_pool.slots[slot_id]);

	return 0;
}
Beispiel #2
0
int
rte_kni_release(struct rte_kni *kni)
{
	struct rte_kni_device_info dev_info;

	if (!kni || !kni->in_use)
		return -1;

	rte_snprintf(dev_info.name, sizeof(dev_info.name), kni->name);
	if (ioctl(kni_fd, RTE_KNI_IOCTL_RELEASE, &dev_info) < 0) {
		RTE_LOG(ERR, KNI, "Fail to release kni device\n");
		return -1;
	}

	/* mbufs in all fifo should be released, except request/response */
	kni_free_fifo(kni->tx_q);
	kni_free_fifo(kni->rx_q);
	kni_free_fifo(kni->alloc_q);
	kni_free_fifo(kni->free_q);
	memset(kni, 0, sizeof(struct rte_kni));

	return 0;
}