[dpdk-dev] [PATCH v4 0/4] add ifcvf vdpa driver
Xiao Wang
xiao.w.wang at intel.com
Wed Apr 4 16:40:38 CEST 2018
This patch set has dependency on http://dpdk.org/dev/patchwork/patch/36772/
(vhost: support selective datapath).
IFCVF driver
============
The IFCVF vDPA (vhost data path acceleration) driver provides support for the
Intel FPGA 100G VF (IFCVF). IFCVF's datapath is virtio ring compatible, it
works as a HW vhost backend which can send/receive packets to/from virtio
directly by DMA. Besides, it supports dirty page logging and device state
report/restore. This driver enables its vDPA functionality with live migration
feature.
vDPA mode
=========
IFCVF's vendor ID and device ID are same as that of virtio net pci device,
with its specific subsystem vendor ID and device ID. To let the device be
probed by IFCVF driver, adding "vdpa=1" parameter helps to specify that this
device is to be used in vDPA mode, rather than polling mode, virtio pmd will
skip when it detects this message.
Container per device
====================
vDPA needs to create different containers for different devices, thus this
patch set adds some APIs in eal/vfio to support multiple container, e.g.
- rte_vfio_create_container
- rte_vfio_destroy_container
- rte_vfio_bind_group
- rte_vfio_unbind_group
By this extension, a device can be put into a new specific container, rather
than the previous default container.
IFCVF vDPA details
==================
Key vDPA driver ops implemented:
- ifcvf_dev_config:
Enable VF data path with virtio information provided by vhost lib, including
IOMMU programming to enable VF DMA to VM's memory, VFIO interrupt setup to
route HW interrupt to virtio driver, create notify relay thread to translate
virtio driver's kick to a MMIO write onto HW, HW queues configuration.
This function gets called to set up HW data path backend when virtio driver
in VM gets ready.
- ifcvf_dev_close:
Revoke all the setup in ifcvf_dev_config.
This function gets called when virtio driver stops device in VM.
Change log
==========
v4:
- Rebase on Zhihong's latest vDPA lib patch, with vDPA ops names change.
- Remove API "rte_vfio_get_group_fd", "rte_vfio_bind_group" will return the fd.
- Align the internal vfio_cfg search APIs naming.
v3:
- Add doc and release note for the new driver.
- Remove the vdev concept, make the driver as a PCI driver, it will get probed
by PCI bus driver.
- Rebase on the v4 vDPA lib patch, register a vDPA device instead of a engine.
- Remove the PCI API exposure accordingly.
- Move the MAX_VFIO_CONTAINERS definition to config file.
- Let virtio pmd skips when a virtio device needs to work in vDPA mode.
v2:
- Rename function pci_get_kernel_driver_by_path to rte_pci_device_kdriver_name
to make the API generic cross Linux and BSD, make it as EXPERIMENTAL.
- Rebase on Zhihong's vDPA v3 patch set.
- Minor code cleanup on vfio extension.
Xiao Wang (4):
eal/vfio: add multiple container support
net/virtio: skip device probe in vdpa mode
net/ifcvf: add ifcvf vdpa driver
doc: add ifcvf driver document and release note
config/common_base | 8 +
config/common_linuxapp | 1 +
doc/guides/nics/features/ifcvf.ini | 8 +
doc/guides/nics/ifcvf.rst | 85 ++++
doc/guides/nics/index.rst | 1 +
doc/guides/rel_notes/release_18_05.rst | 9 +
drivers/net/Makefile | 3 +
drivers/net/ifc/Makefile | 36 ++
drivers/net/ifc/base/ifcvf.c | 329 ++++++++++++
drivers/net/ifc/base/ifcvf.h | 160 ++++++
drivers/net/ifc/base/ifcvf_osdep.h | 52 ++
drivers/net/ifc/ifcvf_vdpa.c | 840 +++++++++++++++++++++++++++++++
drivers/net/ifc/rte_ifcvf_version.map | 4 +
drivers/net/virtio/virtio_ethdev.c | 43 ++
lib/librte_eal/bsdapp/eal/eal.c | 52 +-
lib/librte_eal/common/include/rte_vfio.h | 113 +++++
lib/librte_eal/linuxapp/eal/eal_vfio.c | 521 +++++++++++++++----
lib/librte_eal/linuxapp/eal/eal_vfio.h | 1 +
lib/librte_eal/rte_eal_version.map | 6 +
mk/rte.app.mk | 3 +
20 files changed, 2174 insertions(+), 101 deletions(-)
create mode 100644 doc/guides/nics/features/ifcvf.ini
create mode 100644 doc/guides/nics/ifcvf.rst
create mode 100644 drivers/net/ifc/Makefile
create mode 100644 drivers/net/ifc/base/ifcvf.c
create mode 100644 drivers/net/ifc/base/ifcvf.h
create mode 100644 drivers/net/ifc/base/ifcvf_osdep.h
create mode 100644 drivers/net/ifc/ifcvf_vdpa.c
create mode 100644 drivers/net/ifc/rte_ifcvf_version.map
--
2.15.1
More information about the dev
mailing list