mbox series

[00/14] vDPA API and framework rework

Message ID 20200611213748.1967029-1-maxime.coquelin@redhat.com (mailing list archive)
Headers
Series vDPA API and framework rework |

Message

Maxime Coquelin June 11, 2020, 9:37 p.m. UTC
  This series aims to rework the vDPA framework and
its API to better fit into the DPDK device model
and also be more easily consumable by applications.

Main changes are creating a device class for vDPA,
which enables applications to iterate vDPA devices
in a generic way:

RTE_DEV_FOREACH(dev, "class=vdpa", it) {...}

Also the notion of vDPA device ID is replaced
with both application & drivers using the
rte_vdpa_device as reference. Doing that also
made possible to store devices references into
a linked list instead of a static array. Last
patch makes the rte_vdpa_device structure
content opaque to the applications, creating
a clear barrier between application visible
API and drivers visble ones.

The first two patches fixes issues in some
busses iterators, causing segmentation faults
when iterating only on a device class.

While reviewing, if you notice further possible
improvements, please let me know. Target is to
remove the experimental tag from vDPA APIs in
next LTS release.

Thanks to David for giving me some ideas of
improvements!

Maxime Coquelin (14):
  bus/dpaa: fix null pointer dereference
  bus/fslmc: fix null pointer dereference
  vhost: introduce vDPA devices class
  vhost: make vDPA framework bus agnostic
  vhost: replace device ID in vDPA ops
  vhost: replace vDPA device ID in Vhost
  vhost: replace device ID in applications
  vhost: remove useless vDPA API
  vhost: use linked-list for vDPA devices
  vhost: introduce wrappers for some vDPA ops
  examples/vdpa: use new wrappers instead of ops
  examples/vdpa: remove useless device count
  vhost: remove vDPA device count API
  vhost: split vDPA header file

 drivers/bus/dpaa/dpaa_bus.c            |   5 +
 drivers/bus/fslmc/fslmc_bus.c          |   5 +
 drivers/vdpa/ifc/ifcvf_vdpa.c          |  84 ++++-----
 drivers/vdpa/mlx5/mlx5_vdpa.c          |  85 +++++----
 drivers/vdpa/mlx5/mlx5_vdpa.h          |   5 +-
 examples/vdpa/main.c                   | 108 +++++------
 lib/librte_vhost/Makefile              |   3 +-
 lib/librte_vhost/meson.build           |   3 +-
 lib/librte_vhost/rte_vdpa.h            | 172 ++++--------------
 lib/librte_vhost/rte_vdpa_dev.h        | 135 ++++++++++++++
 lib/librte_vhost/rte_vhost.h           |  20 ++-
 lib/librte_vhost/rte_vhost_version.map |  11 +-
 lib/librte_vhost/socket.c              |  48 ++---
 lib/librte_vhost/vdpa.c                | 238 ++++++++++++++++---------
 lib/librte_vhost/vhost.c               |  19 +-
 lib/librte_vhost/vhost.h               |   9 +-
 lib/librte_vhost/vhost_user.c          |  28 +--
 17 files changed, 545 insertions(+), 433 deletions(-)
 create mode 100644 lib/librte_vhost/rte_vdpa_dev.h
  

Comments

Gaƫtan Rivet June 12, 2020, 9:38 a.m. UTC | #1
Hello Maxime,

On 11/06/20 23:37 +0200, Maxime Coquelin wrote:
> This series aims to rework the vDPA framework and
> its API to better fit into the DPDK device model
> and also be more easily consumable by applications.
> 
> Main changes are creating a device class for vDPA,
> which enables applications to iterate vDPA devices
> in a generic way:
> 
> RTE_DEV_FOREACH(dev, "class=vdpa", it) {...}
> 

That's neat, I was wondering if the class layer would become useful
someday.

> Also the notion of vDPA device ID is replaced
> with both application & drivers using the
> rte_vdpa_device as reference. Doing that also
> made possible to store devices references into
> a linked list instead of a static array. Last
> patch makes the rte_vdpa_device structure
> content opaque to the applications, creating
> a clear barrier between application visible
> API and drivers visble ones.
> 
> The first two patches fixes issues in some
> busses iterators, causing segmentation faults
> when iterating only on a device class.
> 
> While reviewing, if you notice further possible
> improvements, please let me know. Target is to
> remove the experimental tag from vDPA APIs in
> next LTS release.
> 
> Thanks to David for giving me some ideas of
> improvements!
> 

I can't really comment on vhost parts and vdpa implems,
but overall this seems a good idea to me.

> Maxime Coquelin (14):
>   bus/dpaa: fix null pointer dereference
>   bus/fslmc: fix null pointer dereference
>   vhost: introduce vDPA devices class
>   vhost: make vDPA framework bus agnostic
>   vhost: replace device ID in vDPA ops
>   vhost: replace vDPA device ID in Vhost
>   vhost: replace device ID in applications
>   vhost: remove useless vDPA API
>   vhost: use linked-list for vDPA devices
>   vhost: introduce wrappers for some vDPA ops
>   examples/vdpa: use new wrappers instead of ops
>   examples/vdpa: remove useless device count
>   vhost: remove vDPA device count API
>   vhost: split vDPA header file
> 
>  drivers/bus/dpaa/dpaa_bus.c            |   5 +
>  drivers/bus/fslmc/fslmc_bus.c          |   5 +
>  drivers/vdpa/ifc/ifcvf_vdpa.c          |  84 ++++-----
>  drivers/vdpa/mlx5/mlx5_vdpa.c          |  85 +++++----
>  drivers/vdpa/mlx5/mlx5_vdpa.h          |   5 +-
>  examples/vdpa/main.c                   | 108 +++++------
>  lib/librte_vhost/Makefile              |   3 +-
>  lib/librte_vhost/meson.build           |   3 +-
>  lib/librte_vhost/rte_vdpa.h            | 172 ++++--------------
>  lib/librte_vhost/rte_vdpa_dev.h        | 135 ++++++++++++++
>  lib/librte_vhost/rte_vhost.h           |  20 ++-
>  lib/librte_vhost/rte_vhost_version.map |  11 +-
>  lib/librte_vhost/socket.c              |  48 ++---
>  lib/librte_vhost/vdpa.c                | 238 ++++++++++++++++---------
>  lib/librte_vhost/vhost.c               |  19 +-
>  lib/librte_vhost/vhost.h               |   9 +-
>  lib/librte_vhost/vhost_user.c          |  28 +--
>  17 files changed, 545 insertions(+), 433 deletions(-)
>  create mode 100644 lib/librte_vhost/rte_vdpa_dev.h
> 
> -- 
> 2.26.2
>