From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 0A6DE378B for ; Fri, 14 Apr 2017 08:09:44 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP; 13 Apr 2017 23:09:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,197,1488873600"; d="scan'208";a="74005059" Received: from dpdk06.sh.intel.com ([10.239.129.195]) by orsmga002.jf.intel.com with ESMTP; 13 Apr 2017 23:09:42 -0700 From: Jianfeng Tan To: dev@dpdk.org Cc: yuanhan.liu@linux.intel.com, Jianfeng Tan Date: Fri, 14 Apr 2017 06:10:30 +0000 Message-Id: <1492150230-131946-1-git-send-email-jianfeng.tan@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dpdk-dev] [PATCH] net/virtio-user: fix LSC not working X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Apr 2017 06:09:45 -0000 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 --- drivers/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 c9e8ac5..450404b 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.7.4