From patchwork Thu Jul 6 08:12:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Coquelin X-Patchwork-Id: 129329 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E45A642DE6; Thu, 6 Jul 2023 10:13:16 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ED96D42D9C; Thu, 6 Jul 2023 10:13:12 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id AFB0442D9C for ; Thu, 6 Jul 2023 10:13:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1688631191; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qBmNpVZ4ylsGJfMQkw5ZOedtdT4oFX59avZ6u5MHr7U=; b=QTnJuMMVWgduvK37cEwcKk4hdNYtyCVeHp5lL7uxUa2EujjWWeU4jFKZ9dYg5zQSO966XT Jlmwr16EkSStR2UFdsznyKx9gkrGhgjx+E4WT8Uya2J6vdhTytkch+GqZ5l0ZiJFplmcCF 1rkbm4eoqoS5g9Y4KKqgB1hUHnv8f+Q= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-658-JYCSs0EWNNOEtI8Jj3PiNQ-1; Thu, 06 Jul 2023 04:13:05 -0400 X-MC-Unique: JYCSs0EWNNOEtI8Jj3PiNQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D2BFB3806632; Thu, 6 Jul 2023 08:13:04 +0000 (UTC) Received: from max-t490s.redhat.com (unknown [10.39.208.34]) by smtp.corp.redhat.com (Postfix) with ESMTP id D48801121330; Thu, 6 Jul 2023 08:13:03 +0000 (UTC) From: Maxime Coquelin To: dev@dpdk.org, chenbo.xia@intel.com, david.marchand@redhat.com Cc: Maxime Coquelin Subject: [PATCH v2 1/2] vduse: fix missing event index features Date: Thu, 6 Jul 2023 10:12:22 +0200 Message-ID: <20230706081223.151832-2-maxime.coquelin@redhat.com> In-Reply-To: <20230706081223.151832-1-maxime.coquelin@redhat.com> References: <20230706081223.151832-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This features was mistakenly removed, add it back. Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction") Signed-off-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- lib/vhost/vduse.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index a509daf80c..b9514e6c29 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -41,6 +41,7 @@ (1ULL << VIRTIO_NET_F_GUEST_UFO) | \ (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ (1ULL << VIRTIO_RING_F_INDIRECT_DESC) | \ + (1ULL << VIRTIO_RING_F_EVENT_IDX) | \ (1ULL << VIRTIO_F_IN_ORDER) | \ (1ULL << VIRTIO_F_IOMMU_PLATFORM) | \ (1ULL << VIRTIO_NET_F_CTRL_VQ) | \ From patchwork Thu Jul 6 08:12:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Coquelin X-Patchwork-Id: 129328 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9654942DE6; Thu, 6 Jul 2023 10:13:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D8D7242D98; Thu, 6 Jul 2023 10:13:09 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 2951242D93 for ; Thu, 6 Jul 2023 10:13:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1688631187; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YTStsFIQ8Mdnc1Rw10AVw3vQ1gO2+L4cp5OaPfVzpdM=; b=TMgF/rHEVjc8iSptnsF7TU5G7C71iO0eZcmGH7L3TjU1eBOZ/KcbwSjXrsj9wLC17LVoQu q9E+/IQKi4o+dgwgbH/zG4mDSfXeT4W4pF+fsqDAM8ZQcb5XYPUNgO8w9Xzd7f6sJ54+mD PSiVq8h3J8WuvfNmisQja/6WPOVTXwk= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-610-6Hl14DPbOGaRIzylybHksQ-1; Thu, 06 Jul 2023 04:13:06 -0400 X-MC-Unique: 6Hl14DPbOGaRIzylybHksQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3647A85A58A; Thu, 6 Jul 2023 08:13:06 +0000 (UTC) Received: from max-t490s.redhat.com (unknown [10.39.208.34]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2E3211121330; Thu, 6 Jul 2023 08:13:05 +0000 (UTC) From: Maxime Coquelin To: dev@dpdk.org, chenbo.xia@intel.com, david.marchand@redhat.com Cc: Maxime Coquelin Subject: [PATCH v2 2/2] vhost: fix vduse features negotiation Date: Thu, 6 Jul 2023 10:12:23 +0200 Message-ID: <20230706081223.151832-3-maxime.coquelin@redhat.com> In-Reply-To: <20230706081223.151832-1-maxime.coquelin@redhat.com> References: <20230706081223.151832-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The series introducing VDUSE support missed the application capability to disable supported features. This results in TSO being negotiated while not supported by the application. Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction") Signed-off-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- lib/vhost/socket.c | 19 +++++++++++++------ lib/vhost/vduse.c | 29 +++++++---------------------- lib/vhost/vduse.h | 2 ++ lib/vhost/vhost.h | 8 +------- lib/vhost/vhost_user.h | 9 +++++++++ 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c index 19a7469e45..f55fb299fd 100644 --- a/lib/vhost/socket.c +++ b/lib/vhost/socket.c @@ -921,6 +921,10 @@ rte_vhost_driver_register(const char *path, uint64_t flags) VHOST_LOG_CONFIG(path, ERR, "failed to init connection mutex\n"); goto out_free; } + + if (!strncmp("/dev/vduse/", path, strlen("/dev/vduse/"))) + vsocket->is_vduse = true; + vsocket->vdpa_dev = NULL; vsocket->max_queue_pairs = VHOST_MAX_QUEUE_PAIRS; vsocket->extbuf = flags & RTE_VHOST_USER_EXTBUF_SUPPORT; @@ -950,9 +954,14 @@ rte_vhost_driver_register(const char *path, uint64_t flags) * two values. */ vsocket->use_builtin_virtio_net = true; - vsocket->supported_features = VIRTIO_NET_SUPPORTED_FEATURES; - vsocket->features = VIRTIO_NET_SUPPORTED_FEATURES; - vsocket->protocol_features = VHOST_USER_PROTOCOL_FEATURES; + if (vsocket->is_vduse) { + vsocket->supported_features = VDUSE_NET_SUPPORTED_FEATURES; + vsocket->features = VDUSE_NET_SUPPORTED_FEATURES; + } else { + vsocket->supported_features = VHOST_USER_NET_SUPPORTED_FEATURES; + vsocket->features = VHOST_USER_NET_SUPPORTED_FEATURES; + vsocket->protocol_features = VHOST_USER_PROTOCOL_FEATURES; + } if (vsocket->async_copy) { vsocket->supported_features &= ~(1ULL << VHOST_F_LOG_ALL); @@ -993,9 +1002,7 @@ rte_vhost_driver_register(const char *path, uint64_t flags) #endif } - if (!strncmp("/dev/vduse/", path, strlen("/dev/vduse/"))) { - vsocket->is_vduse = true; - } else { + if (!vsocket->is_vduse) { if ((flags & RTE_VHOST_USER_CLIENT) != 0) { vsocket->reconnect = !(flags & RTE_VHOST_USER_NO_RECONNECT); if (vsocket->reconnect && reconn_tid == 0) { diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index b9514e6c29..1478562be1 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -26,27 +26,6 @@ #define VHOST_VDUSE_API_VERSION 0 #define VDUSE_CTRL_PATH "/dev/vduse/control" -#define VDUSE_NET_SUPPORTED_FEATURES ((1ULL << VIRTIO_NET_F_MRG_RXBUF) | \ - (1ULL << VIRTIO_F_ANY_LAYOUT) | \ - (1ULL << VIRTIO_F_VERSION_1) | \ - (1ULL << VIRTIO_NET_F_GSO) | \ - (1ULL << VIRTIO_NET_F_HOST_TSO4) | \ - (1ULL << VIRTIO_NET_F_HOST_TSO6) | \ - (1ULL << VIRTIO_NET_F_HOST_UFO) | \ - (1ULL << VIRTIO_NET_F_HOST_ECN) | \ - (1ULL << VIRTIO_NET_F_CSUM) | \ - (1ULL << VIRTIO_NET_F_GUEST_CSUM) | \ - (1ULL << VIRTIO_NET_F_GUEST_TSO4) | \ - (1ULL << VIRTIO_NET_F_GUEST_TSO6) | \ - (1ULL << VIRTIO_NET_F_GUEST_UFO) | \ - (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ - (1ULL << VIRTIO_RING_F_INDIRECT_DESC) | \ - (1ULL << VIRTIO_RING_F_EVENT_IDX) | \ - (1ULL << VIRTIO_F_IN_ORDER) | \ - (1ULL << VIRTIO_F_IOMMU_PLATFORM) | \ - (1ULL << VIRTIO_NET_F_CTRL_VQ) | \ - (1ULL << VIRTIO_NET_F_MQ)) - struct vduse { struct fdset fdset; }; @@ -441,7 +420,7 @@ vduse_device_create(const char *path) struct virtio_net *dev; struct virtio_net_config vnet_config = { 0 }; uint64_t ver = VHOST_VDUSE_API_VERSION; - uint64_t features = VDUSE_NET_SUPPORTED_FEATURES; + uint64_t features; struct vduse_dev_config *dev_config = NULL; const char *name = path + strlen("/dev/vduse/"); @@ -489,6 +468,12 @@ vduse_device_create(const char *path) goto out_ctrl_close; } + ret = rte_vhost_driver_get_features(path, &features); + if (ret < 0) { + VHOST_LOG_CONFIG(name, ERR, "Failed to get backend features\n"); + goto out_free; + } + ret = rte_vhost_driver_get_queue_num(path, &max_queue_pairs); if (ret < 0) { VHOST_LOG_CONFIG(name, ERR, "Failed to get max queue pairs\n"); diff --git a/lib/vhost/vduse.h b/lib/vhost/vduse.h index a15e5d4c16..d0142694a7 100644 --- a/lib/vhost/vduse.h +++ b/lib/vhost/vduse.h @@ -7,6 +7,8 @@ #include "vhost.h" +#define VDUSE_NET_SUPPORTED_FEATURES VIRTIO_NET_SUPPORTED_FEATURES + #ifdef VHOST_HAS_VDUSE int vduse_device_create(const char *path); diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h index 9ecede0f30..f49ce943b0 100644 --- a/lib/vhost/vhost.h +++ b/lib/vhost/vhost.h @@ -438,12 +438,8 @@ struct vring_packed_desc_event { #define VIRTIO_NET_SUPPORTED_FEATURES ((1ULL << VIRTIO_NET_F_MRG_RXBUF) | \ (1ULL << VIRTIO_F_ANY_LAYOUT) | \ (1ULL << VIRTIO_NET_F_CTRL_VQ) | \ - (1ULL << VIRTIO_NET_F_CTRL_RX) | \ - (1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE) | \ (1ULL << VIRTIO_NET_F_MQ) | \ (1ULL << VIRTIO_F_VERSION_1) | \ - (1ULL << VHOST_F_LOG_ALL) | \ - (1ULL << VHOST_USER_F_PROTOCOL_FEATURES) | \ (1ULL << VIRTIO_NET_F_GSO) | \ (1ULL << VIRTIO_NET_F_HOST_TSO4) | \ (1ULL << VIRTIO_NET_F_HOST_TSO6) | \ @@ -457,10 +453,8 @@ struct vring_packed_desc_event { (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ (1ULL << VIRTIO_RING_F_INDIRECT_DESC) | \ (1ULL << VIRTIO_RING_F_EVENT_IDX) | \ - (1ULL << VIRTIO_NET_F_MTU) | \ (1ULL << VIRTIO_F_IN_ORDER) | \ - (1ULL << VIRTIO_F_IOMMU_PLATFORM) | \ - (1ULL << VIRTIO_F_RING_PACKED)) + (1ULL << VIRTIO_F_IOMMU_PLATFORM)) struct guest_page { diff --git a/lib/vhost/vhost_user.h b/lib/vhost/vhost_user.h index 1ffeca92f3..edf7adb3c0 100644 --- a/lib/vhost/vhost_user.h +++ b/lib/vhost/vhost_user.h @@ -13,6 +13,15 @@ #define VHOST_MEMORY_MAX_NREGIONS 8 +#define VHOST_USER_NET_SUPPORTED_FEATURES \ + (VIRTIO_NET_SUPPORTED_FEATURES | \ + (1ULL << VIRTIO_F_RING_PACKED) | \ + (1ULL << VIRTIO_NET_F_MTU) | \ + (1ULL << VHOST_F_LOG_ALL) | \ + (1ULL << VHOST_USER_F_PROTOCOL_FEATURES) | \ + (1ULL << VIRTIO_NET_F_CTRL_RX) | \ + (1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE)) + #define VHOST_USER_PROTOCOL_FEATURES ((1ULL << VHOST_USER_PROTOCOL_F_MQ) | \ (1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD) |\ (1ULL << VHOST_USER_PROTOCOL_F_RARP) | \