From cc4690e980f4759e53a9f3d89f48d285a2801eec Mon Sep 17 00:00:00 2001 From: Jianfeng Tan Date: Fri, 14 Apr 2017 06:10:30 +0000 Subject: [PATCH] net/virtio-user: fix link status Previously, we miss to set intr_handle->fd which will be used as target file for epoll to check LSC. As a result, stdin (0) is used and intr thread keeps busy whenever data comes from stdin. To fix this, we use vhostfd as the target file for epoll to check the link status change events. And we move intr_handle initialization after vhost backend settup to make sure vhostfd is initialized. Fixes: 35c4f8554833 ("net/virtio-user: support to report net status") Signed-off-by: Jianfeng Tan Acked-by: Yuanhan Liu --- .../net/virtio/virtio_user/virtio_user_dev.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index c9e8ac5b16..450404ba69 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -271,6 +271,8 @@ virtio_user_fill_intr_handle(struct virtio_user_dev *dev) eth_dev->intr_handle->nb_efd = dev->max_queue_pairs; eth_dev->intr_handle->max_intr = dev->max_queue_pairs + 1; eth_dev->intr_handle->type = RTE_INTR_HANDLE_VDEV; + if (dev->vhostfd >= 0) + eth_dev->intr_handle->fd = dev->vhostfd; return 0; } @@ -284,12 +286,6 @@ virtio_user_dev_setup(struct virtio_user_dev *dev) dev->vhostfds = NULL; dev->tapfds = NULL; - if (virtio_user_dev_init_notify(dev) < 0) - return -1; - - if (virtio_user_fill_intr_handle(dev) < 0) - return -1; - if (is_vhost_user_by_type(dev->path)) { dev->ops = &ops_user; } else { @@ -308,7 +304,16 @@ virtio_user_dev_setup(struct virtio_user_dev *dev) } } - return dev->ops->setup(dev); + if (dev->ops->setup(dev) < 0) + return -1; + + if (virtio_user_dev_init_notify(dev) < 0) + return -1; + + if (virtio_user_fill_intr_handle(dev) < 0) + return -1; + + return 0; } /* Use below macro to filter features from vhost backend */ -- 2.20.1