[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220714081251.240584-1-yishaih@nvidia.com>
Date: Thu, 14 Jul 2022 11:12:40 +0300
From: Yishai Hadas <yishaih@...dia.com>
To: <alex.williamson@...hat.com>, <jgg@...dia.com>
CC: <saeedm@...dia.com>, <kvm@...r.kernel.org>,
<netdev@...r.kernel.org>, <kuba@...nel.org>,
<kevin.tian@...el.com>, <joao.m.martins@...cle.com>,
<leonro@...dia.com>, <yishaih@...dia.com>, <maorg@...dia.com>,
<cohuck@...hat.com>
Subject: [PATCH V2 vfio 00/11] Add device DMA logging support for mlx5 driver
This series adds device DMA logging uAPIs and their implementation as
part of mlx5 driver.
DMA logging allows a device to internally record what DMAs the device is
initiating and report them back to userspace. It is part of the VFIO
migration infrastructure that allows implementing dirty page tracking
during the pre copy phase of live migration. Only DMA WRITEs are logged,
and this API is not connected to VFIO_DEVICE_FEATURE_MIG_DEVICE_STATE.
The uAPIs are based on the FEATURE ioctl as were introduced earlier by
the below RFC [1] and follows the notes that were discussed in the
mailing list.
It includes:
- A PROBE option to detect if the device supports DMA logging.
- A SET option to start device DMA logging in given IOVAs ranges.
- A GET option to read back and clear the device DMA log.
- A SET option to stop device DMA logging that was previously started.
Extra details exist as part of relevant patches in the series.
In addition, the series adds some infrastructure support for managing an
IOVA bitmap done by Joao Martins.
It abstracts how an IOVA range is represented in a bitmap that is
granulated by a given page_size. So it translates all the lifting of
dealing with user pointers into its corresponding kernel addresses
backing said user memory into doing finally the bitmap ops to change
various bits.
This functionality will be used as part of IOMMUFD series for the system
IOMMU tracking.
Finally, we come with mlx5 implementation based on its device
specification for the DMA logging APIs.
The matching qemu changes can be previewed here [2].
They come on top of the v2 migration protocol patches that were sent
already to the mailing list.
Few notes:
- The first 2 patches were sent already separately, as the series relies
on add them here as well.
- As this series touched mlx5_core parts we may need to send the
net/mlx5 patches as a pull request format to VFIO to avoid conflicts
before acceptance.
[1] https://lore.kernel.org/all/20220501123301.127279-1-yishaih@nvidia.com/T/
[2] https://github.com/avihai1122/qemu/commits/device_dirty_tracking
Changes from V1: https://lore.kernel.org/netdev/202207052209.x00Iykkp-lkp@intel.com/T/
- Patch #6: Fix a note given by krobot, select INTERVAL_TREE for VFIO.
Changes from V0: https://lore.kernel.org/netdev/202207011231.1oPQhSzo-lkp@intel.com/T/
- Drop the first 2 patches that Alex merged already.
- Fix a note given by krobot, based on Jason's suggestion.
- Some improvements from Joao for his IOVA bitmap patch to be
cleaner/simpler. It includes the below:
* Rename iova_bitmap_array_length to iova_bitmap_iova_to_index.
* Rename iova_bitmap_index_to_length to iova_bitmap_index_to_iova.
* Change iova_bitmap_iova_to_index to take an iova_bitmap_iter
as an argument to pair with iova_bitmap_index_to_length.
* Make iova_bitmap_iter_done() use >= instead of
substraction+comparison. This fixes iova_bitmap_iter_done()
return as it was previously returning when !done.
* Remove iova_bitmap_iter_length().
* Simplify iova_bitmap_length() overcomplicated trailing end check
* Convert all sizeof(u64) into sizeof(*iter->data).
* Use u64 __user for ::data instead of void in both struct and
initialization of iova_bitmap.
Yishai
Jason Gunthorpe (1):
vfio: Move vfio.c to vfio_main.c
Joao Martins (1):
vfio: Add an IOVA bitmap support
Yishai Hadas (9):
net/mlx5: Introduce ifc bits for page tracker
net/mlx5: Query ADV_VIRTUALIZATION capabilities
vfio: Introduce DMA logging uAPIs
vfio: Introduce the DMA logging feature support
vfio/mlx5: Init QP based resources for dirty tracking
vfio/mlx5: Create and destroy page tracker object
vfio/mlx5: Report dirty pages from tracker
vfio/mlx5: Manage error scenarios on tracker
vfio/mlx5: Set the driver DMA logging callbacks
drivers/net/ethernet/mellanox/mlx5/core/fw.c | 6 +
.../net/ethernet/mellanox/mlx5/core/main.c | 1 +
drivers/vfio/Kconfig | 1 +
drivers/vfio/Makefile | 4 +
drivers/vfio/iova_bitmap.c | 164 +++
drivers/vfio/pci/mlx5/cmd.c | 995 +++++++++++++++++-
drivers/vfio/pci/mlx5/cmd.h | 63 +-
drivers/vfio/pci/mlx5/main.c | 9 +-
drivers/vfio/pci/vfio_pci_core.c | 5 +
drivers/vfio/{vfio.c => vfio_main.c} | 161 +++
include/linux/iova_bitmap.h | 46 +
include/linux/mlx5/device.h | 9 +
include/linux/mlx5/mlx5_ifc.h | 79 +-
include/linux/vfio.h | 21 +-
include/uapi/linux/vfio.h | 79 ++
15 files changed, 1625 insertions(+), 18 deletions(-)
create mode 100644 drivers/vfio/iova_bitmap.c
rename drivers/vfio/{vfio.c => vfio_main.c} (93%)
create mode 100644 include/linux/iova_bitmap.h
--
2.18.1
Powered by blists - more mailing lists