[dpdk-dev] [PATCH v4 00/22] vhost: generic vhost API
Yuanhan Liu
yuanhan.liu at linux.intel.com
Sat Apr 1 10:44:49 CEST 2017
On Sat, Apr 01, 2017 at 03:22:38PM +0800, Yuanhan Liu wrote:
> This patchset makes DPDK vhost library generic enough, so that we could
> build other vhost-user drivers on top of it. For example, SPDK (Storage
> Performance Development Kit) is trying to enable vhost-user SCSI.
>
> The basic idea is, let DPDK vhost be a vhost-user agent. It stores all
> the info about the virtio device (i.e. vring address, negotiated features,
> etc) and let the specific vhost-user driver to fetch them (by the API
> provided by DPDK vhost lib). With those info being provided, the vhost-user
> driver then could get/put vring entries, thus, it could exchange data
> between the guest and host.
>
> The last patch demonstrates how to use these new APIs to implement a
> very simple vhost-user net driver, without any fancy features enabled.
Series applied to dpdk-next-virtio.
--yliu
>
>
> Change log
> ==========
>
> v2: - rebase
> - updated release note
> - updated API comments
> - renamed rte_vhost_get_vhost_memory to rte_vhost_get_mem_table
>
> - added a new device callback: features_changed(), bascially for live
> migration support
> - introduced rte_vhost_driver_start() to start a specific driver
> - misc fixes
>
> v3: - rebaseon top of vhost-user socket fix
> - fix reconnect
> - fix shared build
> - fix typos
>
> v4: - rebase
> - let rte_vhost_get.*_features() to return features by parameter and
> return -1 on failure
> - Follow the style of ring rework to update the release note: use one
> entry for all vhost changes and add sub items for each change.
>
>
> Major API/ABI Changes summary
> =============================
>
> - some renames
> * "struct virtio_net_device_ops" ==> "struct vhost_device_ops"
> * "rte_virtio_net.h" ==> "rte_vhost.h"
>
> - driver related APIs are bond with the socket file
> * rte_vhost_driver_set_features(socket_file, features);
> * rte_vhost_driver_get_features(socket_file, features);
> * rte_vhost_driver_enable_features(socket_file, features)
> * rte_vhost_driver_disable_features(socket_file, features)
> * rte_vhost_driver_callback_register(socket_file, notify_ops);
> * rte_vhost_driver_start(socket_file);
> This function replaces rte_vhost_driver_session_start(). Check patch
> 18 for more information.
>
> - new APIs to fetch guest and vring info
> * rte_vhost_get_mem_table(vid, mem);
> * rte_vhost_get_negotiated_features(vid);
> * rte_vhost_get_vhost_vring(vid, vring_idx, vring);
>
> - new exported structures
> * struct rte_vhost_vring
> * struct rte_vhost_mem_region
> * struct rte_vhost_memory
>
> - a new device ops callback: features_changed().
>
>
> --yliu
>
> ---
> Yuanhan Liu (22):
> vhost: introduce driver features related APIs
> net/vhost: remove feature related APIs
> vhost: use new APIs to handle features
> vhost: make notify ops per vhost driver
> vhost: export guest memory regions
> vhost: introduce API to fetch negotiated features
> vhost: export vhost vring info
> vhost: export API to translate gpa to vva
> vhost: turn queue pair to vring
> vhost: export the number of vrings
> vhost: move the device ready check at proper place
> vhost: drop the Rx and Tx queue macro
> vhost: do not include net specific headers
> vhost: rename device ops struct
> vhost: rename virtio-net to vhost
> vhost: add features changed callback
> vhost: export APIs for live migration support
> vhost: introduce API to start a specific driver
> vhost: rename header file
> vhost: workaround the build dependency on mbuf header
> vhost: do not destroy device on repeat mem table message
> examples/vhost: demonstrate the new generic vhost APIs
>
> doc/guides/prog_guide/vhost_lib.rst | 42 +--
> doc/guides/rel_notes/deprecation.rst | 9 -
> doc/guides/rel_notes/release_17_05.rst | 43 +++
> drivers/net/vhost/rte_eth_vhost.c | 101 ++-----
> drivers/net/vhost/rte_eth_vhost.h | 32 +--
> drivers/net/vhost/rte_pmd_vhost_version.map | 3 -
> examples/tep_termination/main.c | 23 +-
> examples/tep_termination/main.h | 2 +
> examples/tep_termination/vxlan_setup.c | 2 +-
> examples/vhost/Makefile | 2 +-
> examples/vhost/main.c | 100 +++++--
> examples/vhost/main.h | 32 ++-
> examples/vhost/virtio_net.c | 405 ++++++++++++++++++++++++++
> lib/librte_vhost/Makefile | 4 +-
> lib/librte_vhost/fd_man.c | 9 +-
> lib/librte_vhost/fd_man.h | 2 +-
> lib/librte_vhost/rte_vhost.h | 427 ++++++++++++++++++++++++++++
> lib/librte_vhost/rte_vhost_version.map | 16 +-
> lib/librte_vhost/rte_virtio_net.h | 208 --------------
> lib/librte_vhost/socket.c | 229 ++++++++++++---
> lib/librte_vhost/vhost.c | 230 ++++++++-------
> lib/librte_vhost/vhost.h | 113 +++++---
> lib/librte_vhost/vhost_user.c | 121 ++++----
> lib/librte_vhost/vhost_user.h | 2 +-
> lib/librte_vhost/virtio_net.c | 71 ++---
> 25 files changed, 1541 insertions(+), 687 deletions(-)
> create mode 100644 examples/vhost/virtio_net.c
> create mode 100644 lib/librte_vhost/rte_vhost.h
> delete mode 100644 lib/librte_vhost/rte_virtio_net.h
>
> --
> 1.9.0
More information about the dev
mailing list