コード例 #1
0
ファイル: virtio-net.c プロジェクト: megahall/dpdk_mhall
/*
 * Reset some variables in device structure, while keeping few
 * others untouched, such as device_fh, ifname, virt_qp_nb: they
 * should be same unless the device is removed.
 */
static void
reset_device(struct virtio_net *dev)
{
	uint32_t i;

	dev->features = 0;
	dev->protocol_features = 0;
	dev->flags = 0;

	for (i = 0; i < dev->virt_qp_nb; i++)
		init_vring_queue_pair(dev, i);
}
コード例 #2
0
ファイル: virtio-net.c プロジェクト: suohd/dpdk
/*
 *  Initialise all variables in device structure.
 */
static void
init_device(struct virtio_net *dev)
{
	int vq_offset;
	uint32_t i;

	/*
	 * Virtqueues have already been malloced so
	 * we don't want to set them to NULL.
	 */
	vq_offset = offsetof(struct virtio_net, virtqueue);
	memset(dev, 0, vq_offset);

	for (i = 0; i < dev->virt_qp_nb; i++)
		init_vring_queue_pair(dev, i);
}
コード例 #3
0
ファイル: virtio-net.c プロジェクト: suohd/dpdk
static int
alloc_vring_queue_pair(struct virtio_net *dev, uint32_t qp_idx)
{
	struct vhost_virtqueue *virtqueue = NULL;
	uint32_t virt_rx_q_idx = qp_idx * VIRTIO_QNUM + VIRTIO_RXQ;
	uint32_t virt_tx_q_idx = qp_idx * VIRTIO_QNUM + VIRTIO_TXQ;

	virtqueue = rte_malloc(NULL,
			       sizeof(struct vhost_virtqueue) * VIRTIO_QNUM, 0);
	if (virtqueue == NULL) {
		RTE_LOG(ERR, VHOST_CONFIG,
			"Failed to allocate memory for virt qp:%d.\n", qp_idx);
		return -1;
	}

	dev->virtqueue[virt_rx_q_idx] = virtqueue;
	dev->virtqueue[virt_tx_q_idx] = virtqueue + VIRTIO_TXQ;

	init_vring_queue_pair(dev, qp_idx);

	dev->virt_qp_nb += 1;

	return 0;
}