From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 851C5A0A05; Tue, 19 Jan 2021 22:25:52 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 07D7C140DD3; Tue, 19 Jan 2021 22:25:52 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mails.dpdk.org (Postfix) with ESMTP id 0E331140DCF for ; Tue, 19 Jan 2021 22:25:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1611091549; 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; bh=1nx9CJR83OSp44cqQAtfjdu6NNmYj8G6weKs/nPNWMg=; b=WJcO+sodro061fWm4/Nbb8hC4oNfhzLfSQ2dzjrn9D6Hu8BjmxAT4D0lPVI2zvSSZWct87 Z0jBxrS05h9BId+mRhEnFpaP8sw6OFH9Y0Lvz4CVPegSHb7A+OICHcI9LBiMpcXzPDodxL 3APZcNhrSMebys1wJds7G4gu/wxZ0KY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-199-WBIMorrfPzmQW7c-Rn62mQ-1; Tue, 19 Jan 2021 16:25:47 -0500 X-MC-Unique: WBIMorrfPzmQW7c-Rn62mQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 61CD8800D62; Tue, 19 Jan 2021 21:25:46 +0000 (UTC) Received: from max-t490s.redhat.com (unknown [10.36.110.29]) by smtp.corp.redhat.com (Postfix) with ESMTP id 78C2A5D9E2; Tue, 19 Jan 2021 21:25:38 +0000 (UTC) From: Maxime Coquelin To: dev@dpdk.org, chenbo.xia@intel.com, olivier.matz@6wind.com, amorenoz@redhat.com, david.marchand@redhat.com Cc: Maxime Coquelin Date: Tue, 19 Jan 2021 22:24:23 +0100 Message-Id: <20210119212507.1043636-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=maxime.coquelin@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Subject: [dpdk-dev] [PATCH v2 00/44] net/virtio: Virtio PMD rework 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 Sender: "dev" Thanks Chenbo, David & Adrian for your review contribution to the V1. This V2 should implement all the changes you requested, and fix a few regressions caught while testing. This series significantly rework Virtio PMD to improve the Virtio-user PMD and its backends integration. First part of the series removes the dependency of Virtio-user ethdev on Virtio PCI, by creating generic files, adding per-bus meta data, ... Main (if not single) functionnal change of this first part is to remove the hack for Virtio-user to work in IOVA as PA mode, this hack being very fragile. Second part of the series reworks Virtio-user internal, by reworking the requests handling so that vDPA and Kernel backends no more hack into being Vhost-user backend. It implies implementing new ops for all the request types. Also, all the backend specific actions are moved from the virtio_user_dev.c and virtio_user_ethdev.c to their backend files. Only functionnal change in this second part is making the Vhost-user server mode blocking at init time, as long as a client is not connected. The goal of this change is to make the Vhost-user support much more robust, as without blocking, the driver has to assume features that are going to be supported by the client, which is very fragile and error prone. As a side-effect, it also simplifies the logic nin several place of the virtio-user PMD. Main changes in v2: =================== - Introduce vdev driver flag for drivers to require IOVA VA mode - Rebase on top of -rc1 changes - Fix regressions introduced in V1 (vhost-kernel broken, vhost-user reconnect...) - Various minor issues & typos fixed - Fix status feature issue introduced in v20.11, only reproduceable now that server mode is made blocking - Improve failure handling in Virtio-user - Improve logging Testing coverage (All passed) ============================= - Virtio-pci PMD * Virtio PMD in guest with Vhost-user backend in host * Virtio PMD in guest with Vhost-kernel backend in host - Virtio-user PMD with Vhost-user backend * Vhost-user PMD server <-> Virtio-user client PMD IO loopback * Vhost-user PMD client <-> Virtio-user server PMD IO loopback * Vhost-user PMD client <-> Virtio-user server PMD reconnect - Virtio-user PMD with Vhost-kernel backend * iperf test case * Txonly testpmd - Virtio-user PMD with Vhost-vDPA backend * vdpa-sim (IO loopback) * CX-6 DX Kernel vDPA (Tx only) Maxime Coquelin (44): bus/vdev: add helper to get vdev from eth dev bus/vdev: add driver IOVA VA mode requirement net/virtio: fix getting old status on reconnect net/virtio: introduce Virtio bus type net/virtio: refactor virtio-user device net/virtio: introduce PCI device metadata net/virtio: move PCI device init in dedicated file net/virtio: move PCI specific dev init to PCI ethdev init net/virtio: move MSIX detection to PCI ethdev net/virtio: force IOVA as VA mode for Virtio-user net/virtio: store PCI type in Virtio device metadata net/virtio: add callback for device closing net/virtio: validate features at bus level net/virtio: remove bus type enum net/virtio: move PCI-specific fields to PCI device net/virtio: pack virtio HW struct net/virtio: move legacy IO to Virtio PCI net/virtio: introduce generic virtio header net/virtio: move features definition to generic header net/virtio: move virtqueue defines in generic header net/virtio: move config definitions to generic header net/virtio: make interrupt handling more generic net/virtio: move vring alignment to generic header net/virtio: remove last PCI refs in non-PCI code net/virtio: make Vhost-user req sender consistent net/virtio: add Virtio-user ops to set owner net/virtio: add Virtio-user features ops net/virtio: add Virtio-user protocol features ops net/virtio: add Virtio-user memory tables ops net/virtio: add Virtio-user vring setting ops net/virtio: add Virtio-user vring file ops net/virtio: add Virtio-user vring address ops net/virtio: add Virtio-user status ops net/virtio: remove useless request ops net/virtio: improve Virtio-user errors handling net/virtio: move Vhost-user reqs to Vhost-user backend net/virtio: make server mode blocking net/virtio: move protocol features to Vhost-user net/virtio: introduce backend data net/virtio: move Vhost-user specifics to its backend net/virtio: move Vhost-kernel data to its backend net/virtio: move Vhost-vDPA data to its backend net/virtio: improve Vhost-user error logging net/virtio: handle Virtio-user setup failure properly drivers/bus/vdev/rte_bus_vdev.h | 6 + drivers/bus/vdev/vdev.c | 31 + drivers/net/virtio/meson.build | 6 +- drivers/net/virtio/virtio.c | 71 ++ drivers/net/virtio/virtio.h | 246 +++++ drivers/net/virtio/virtio_ethdev.c | 457 +++------ drivers/net/virtio/virtio_ethdev.h | 6 +- drivers/net/virtio/virtio_pci.c | 449 +++++---- drivers/net/virtio/virtio_pci.h | 286 +----- drivers/net/virtio/virtio_pci_ethdev.c | 226 +++++ drivers/net/virtio/virtio_ring.h | 2 +- drivers/net/virtio/virtio_rxtx.c | 90 +- drivers/net/virtio/virtio_rxtx_packed.h | 10 +- drivers/net/virtio/virtio_rxtx_packed_avx.h | 10 +- drivers/net/virtio/virtio_rxtx_packed_neon.h | 10 +- drivers/net/virtio/virtio_rxtx_simple.h | 3 +- drivers/net/virtio/virtio_user/vhost.h | 79 +- drivers/net/virtio/virtio_user/vhost_kernel.c | 461 ++++++--- .../net/virtio/virtio_user/vhost_kernel_tap.c | 25 +- .../net/virtio/virtio_user/vhost_kernel_tap.h | 1 + drivers/net/virtio/virtio_user/vhost_user.c | 896 ++++++++++++++---- drivers/net/virtio/virtio_user/vhost_vdpa.c | 323 +++++-- .../net/virtio/virtio_user/virtio_user_dev.c | 514 +++++----- .../net/virtio/virtio_user/virtio_user_dev.h | 20 +- drivers/net/virtio/virtio_user_ethdev.c | 301 +----- drivers/net/virtio/virtqueue.c | 6 +- drivers/net/virtio/virtqueue.h | 45 +- 27 files changed, 2704 insertions(+), 1876 deletions(-) create mode 100644 drivers/net/virtio/virtio.c create mode 100644 drivers/net/virtio/virtio.h create mode 100644 drivers/net/virtio/virtio_pci_ethdev.c -- 2.29.2