Thread (9 messages) 9 messages, 4 authors, 2015-09-17

Re: [RFC PATCH] vhost: Add VHOST PMD

From: Tetsuya Mukawa <hidden>
Date: 2015-08-31 06:29:15

On 2015/08/31 14:14, Ouyang, Changchun wrote:
+struct pmd_internal {
+	TAILQ_ENTRY(pmd_internal) next;
+	char *dev_name;
+	char *iface_name;
+	unsigned nb_rx_queues;
+	unsigned nb_tx_queues;
+	rte_atomic16_t xfer;
+
+	struct vhost_queue
rx_vhost_queues[RTE_PMD_RING_MAX_RX_RINGS];
+	struct vhost_queue
tx_vhost_queues[RTE_PMD_RING_MAX_TX_RINGS];
+};
Need consider how the vhost multiple queues implements here.
You can refer to the patch set I sent before.
Hi Ouyang,

I appreciate your comments.
I will refer to your patch and fix it.
quoted
+
+TAILQ_HEAD(pmd_internal_head, pmd_internal); static struct
+pmd_internal_head internals_list =
+	TAILQ_HEAD_INITIALIZER(internals_list);
+
+static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;
+
+static struct rte_eth_link pmd_link = {
+		.link_speed = 10000,
+		.link_duplex = ETH_LINK_FULL_DUPLEX,
+		.link_status = 0
+};
+
+static uint16_t
+eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) {
+	struct vhost_queue *r = q;
+	uint16_t nb_rx;
+
+	if (unlikely(r->internal == NULL))
+		return 0;
+
+	if (unlikely(rte_atomic16_read(&r->internal->xfer) == 0))
+		return 0;
+
+	rte_atomic16_set(&r->rx_executing, 1);
+
+	if (unlikely(rte_atomic16_read(&r->internal->xfer) == 0))
+		goto out;
+
+	nb_rx = (uint16_t)rte_vhost_dequeue_burst(r->device,
+			VIRTIO_TXQ, r->mb_pool, bufs, nb_bufs);
Logically correct here, 
But it would be better to have more clear description why need use VIRTIO_TXQ for vhost_rx function.
It increases readability. :-)
Sure, I will add comments here, also TX function.
+static void *vhost_driver_session(void *param __rte_unused) {
+	static struct virtio_net_device_ops *vhost_ops = NULL;
+	vhost_ops = rte_zmalloc(NULL, sizeof(*vhost_ops), 0);
+	if (vhost_ops == NULL)
+		rte_panic("Can't allocate memory\n");
+
+	/* set vhost arguments */
+	vhost_ops->new_device = new_device;
+	vhost_ops->destroy_device = destroy_device;
+	if (rte_vhost_driver_callback_register(vhost_ops) < 0)
+		rte_panic("Can't register callbacks\n");
+
+	/* start event handling */
+	rte_vhost_driver_session_start();
It should be called after rte_vhost_driver_register, 
But rte_vhost_driver_session_start is called when  dev_init,
Error here?
In the case of vhost-cuse, it seems we should call register() before
calling start().
Thanks for your checking. I will fix it in next patch.

Regards,
Tetsuya
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help