From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id E25C42B9A for ; Fri, 5 Aug 2016 13:36:51 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 05 Aug 2016 04:36:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,473,1464678000"; d="scan'208";a="1030285173" Received: from dpdk06.sh.intel.com ([10.239.129.195]) by orsmga002.jf.intel.com with ESMTP; 05 Aug 2016 04:36:50 -0700 From: Jianfeng Tan To: dev@dpdk.org Cc: yuanhan.liu@linux.intel.com, zhihong.wang@intel.com, lining18@jd.com, Jianfeng Tan Date: Fri, 5 Aug 2016 11:36:41 +0000 Message-Id: <1470397003-5782-2-git-send-email-jianfeng.tan@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470397003-5782-1-git-send-email-jianfeng.tan@intel.com> References: <1470397003-5782-1-git-send-email-jianfeng.tan@intel.com> Subject: [dpdk-dev] [PATCH 1/3] net/virtio_user: fix queue pair not enabled X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Aug 2016 11:36:52 -0000 When virtio_user is used with OVS-DPDK (with mq disabled), it cannot receive any packets. It's because when vhost provides VHOST_USER_GET_PROTOCOL_FEATURES, all queue pairs are initialized in the disabled state. Quote QEMU/docs/specs/vhost-user.txt: If VHOST_USER_F_PROTOCOL_FEATURES has not been negotiated, the ring is initialized in an enabled state. If VHOST_USER_F_PROTOCOL_FEATURES has been negotiated, the ring is initialized in a disabled state. In OVS-DPDK, all queue pairs are in the disabled state by default. When used with QEMU, QEMU will set it as enabled in the process of initialization. So the fix here is to include similar logic in virtio_user. Fixes: 37a7eb2ae816 ("net/virtio-user: add device emulation layer") Reported-by: Ning Li Signed-off-by: Jianfeng Tan --- drivers/net/virtio/virtio_user/virtio_user_dev.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index 376c9cf..2c4e999 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -131,6 +131,13 @@ virtio_user_start_device(struct virtio_user_dev *dev) } } + /* As this feature is negotiated from the vhost, all queues are + * initialized in the disabled state. For non-mq case, we enable + * the 1st queue pair by default. + */ + if (dev->features & (1ull << VHOST_USER_GET_PROTOCOL_FEATURES)) + vhost_user_enable_queue_pair(dev->vhostfd, 0, 1); + /* After setup all virtqueues, we need to set_features so that these * features can be set into each virtqueue in vhost side. And before * that, make sure VHOST_USER_F_PROTOCOL_FEATURES is added if mq is -- 2.7.4