static void init_vring_queue_pair(struct virtio_net *dev, uint32_t qp_idx) { uint32_t base_idx = qp_idx * VIRTIO_QNUM; init_vring_queue(dev->virtqueue[base_idx + VIRTIO_RXQ], qp_idx); init_vring_queue(dev->virtqueue[base_idx + VIRTIO_TXQ], qp_idx); }
static void reset_vring_queue(struct vhost_virtqueue *vq, int qp_idx) { int callfd; callfd = vq->callfd; init_vring_queue(vq, qp_idx); vq->callfd = callfd; }
static void reset_vring_queue(struct virtio_net *dev, uint32_t vring_idx) { struct vhost_virtqueue *vq; int callfd; if (vring_idx >= VHOST_MAX_VRING) { RTE_LOG(ERR, VHOST_CONFIG, "Failed not init vring, out of bound (%d)\n", vring_idx); return; } vq = dev->virtqueue[vring_idx]; callfd = vq->callfd; init_vring_queue(dev, vring_idx); vq->callfd = callfd; }
int alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx) { struct vhost_virtqueue *vq; vq = rte_malloc(NULL, sizeof(struct vhost_virtqueue), 0); if (vq == NULL) { RTE_LOG(ERR, VHOST_CONFIG, "Failed to allocate memory for vring:%u.\n", vring_idx); return -1; } dev->virtqueue[vring_idx] = vq; init_vring_queue(dev, vring_idx); dev->nr_vring += 1; return 0; }