static void
virtio_user_mem_event_cb(enum rte_mem_event type __rte_unused,
- const void *addr __rte_unused,
- size_t len __rte_unused,
- void *arg)
+ const void *addr,
+ size_t len __rte_unused,
+ void *arg)
{
struct virtio_user_dev *dev = arg;
struct rte_memseg_list *msl;
close(dev->kickfds[i]);
}
- close(dev->vhostfd);
+ if (dev->vhostfd >= 0)
+ close(dev->vhostfd);
if (dev->is_server && dev->listenfd >= 0) {
close(dev->listenfd);
}
if (dev->vhostfds) {
- for (i = 0; i < dev->max_queue_pairs; ++i)
+ for (i = 0; i < dev->max_queue_pairs; ++i) {
close(dev->vhostfds[i]);
+ if (dev->tapfds[i] >= 0)
+ close(dev->tapfds[i]);
+ }
free(dev->vhostfds);
free(dev->tapfds);
}
queues = *(uint16_t *)(uintptr_t)vring->desc[idx_data].addr;
status = virtio_user_handle_mq(dev, queues);
+ } else if (hdr->class == VIRTIO_NET_CTRL_RX ||
+ hdr->class == VIRTIO_NET_CTRL_MAC ||
+ hdr->class == VIRTIO_NET_CTRL_VLAN) {
+ status = 0;
}
/* Update status */
queues = *(uint16_t *)(uintptr_t)
vring->desc[idx_data].addr;
status = virtio_user_handle_mq(dev, queues);
+ } else if (hdr->class == VIRTIO_NET_CTRL_RX ||
+ hdr->class == VIRTIO_NET_CTRL_MAC ||
+ hdr->class == VIRTIO_NET_CTRL_VLAN) {
+ status = 0;
}
/* Update status */