mbox series

[00/40] net/virtio: Virtio PMD rework

Message ID 20201220211405.313012-1-maxime.coquelin@redhat.com (mailing list archive)
Headers show
Series net/virtio: Virtio PMD rework | expand

Message

Maxime Coquelin Dec. 20, 2020, 9:13 p.m. UTC
This series significantly rework Virtio PMD to improve
the Virtio-user PMD and its backends integration.

First part of the series (first 21 patches) 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. Now, the
user has to manually pass --iova-mode=va in EAL
parameters, otherwise vdev probe will fail. In v21.11,
when ABI/API can be changed, I will add vdev driver
flags so that the Virtio-user PMD can request IOVA as VA
mode to be used.

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.

Plese note that I haven't tested the last 5 patches yet,
I will conduct more testing early next week.

Maxime Coquelin (40):
  bus/vdev: add helper to get vdev from eth dev
  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

 drivers/bus/vdev/rte_bus_vdev.h               |   2 +
 drivers/net/virtio/meson.build                |   6 +-
 drivers/net/virtio/virtio.c                   |  71 ++
 drivers/net/virtio/virtio.h                   | 247 ++++++
 drivers/net/virtio/virtio_ethdev.c            | 441 +++------
 drivers/net/virtio/virtio_ethdev.h            |   5 +-
 drivers/net/virtio/virtio_pci.c               | 399 +++++----
 drivers/net/virtio/virtio_pci.h               | 286 +-----
 drivers/net/virtio/virtio_pci_ethdev.c        | 225 +++++
 drivers/net/virtio/virtio_ring.h              |   2 +-
 drivers/net/virtio/virtio_rxtx.c              |  90 +-
 drivers/net/virtio/virtio_rxtx_packed_avx.c   |  18 +-
 drivers/net/virtio/virtio_rxtx_simple.h       |   3 +-
 drivers/net/virtio/virtio_user/vhost.h        |  80 +-
 drivers/net/virtio/virtio_user/vhost_kernel.c | 435 ++++++---
 .../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   | 835 ++++++++++++++----
 drivers/net/virtio/virtio_user/vhost_vdpa.c   | 257 ++++--
 .../net/virtio/virtio_user/virtio_user_dev.c  | 490 +++++-----
 .../net/virtio/virtio_user/virtio_user_dev.h  |  22 +-
 drivers/net/virtio/virtio_user_ethdev.c       | 304 ++-----
 drivers/net/virtio/virtqueue.c                |   6 +-
 drivers/net/virtio/virtqueue.h                |  41 +-
 24 files changed, 2481 insertions(+), 1810 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

Comments

Maxime Coquelin Dec. 21, 2020, 10:58 a.m. UTC | #1
On 12/20/20 10:13 PM, Maxime Coquelin wrote:
> This series significantly rework Virtio PMD to improve
> the Virtio-user PMD and its backends integration.
> 
> First part of the series (first 21 patches) 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. Now, the
> user has to manually pass --iova-mode=va in EAL
> parameters, otherwise vdev probe will fail. In v21.11,
> when ABI/API can be changed, I will add vdev driver
> flags so that the Virtio-user PMD can request IOVA as VA
> mode to be used.
> 
> 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.
> 
> Plese note that I haven't tested the last 5 patches yet,
> I will conduct more testing early next week.

I forgot to add the remaining things to do in next release:
1. More testing
2. Rebase on top of Vhost-vDPA batching support
3. Rebase on top of Olivier's protocol features fix
4. (Maybe) Loosen restrictions on IOVA as VA mode, by making Vhost-
   backend to use IOVA instead of directly VAs, but still warn IOVA
   as VA mode is advised to ensure init won't fail.

Regards,
Maxime