History

Merge tag 'vfio-v5.12-rc1' of git://github.com/awilliam/linux-vfio

Pull VFIO updatesfrom Alex Williamson: - Virtual address update handling (Steve Sistare) - s390/zpci fixes and cleanups (Max Gurtovoy) - Fixes for dirty bitmap handling, non-mdev page pinning, and improved pinned dirty scope tracking (Keqian Zhu) - Batched page pinning enhancement (Daniel Jordan) - Page access permission fix (Alex Williamson) * tag 'vfio-v5.12-rc1' of git://github.com/awilliam/linux-vfio: (21 commits) vfio/type1: Batch page pinning vfio/type1: Prepare for batched pinning with struct vfio_batch vfio/type1: Change success value of vaddr_get_pfn() vfio/type1: Use follow_pte() vfio/pci: remove CONFIG_VFIO_PCI_ZDEV from Kconfig vfio/iommu_type1: Fix duplicate included kthread.h vfio-pci/zdev: fix possible segmentation fault issue vfio-pci/zdev: remove unused vdev argument vfio/pci: Fix handling of pci use accessor return codes vfio/iommu_type1: Mantain a counter for non_pinned_groups vfio/iommu_type1: Fix some sanity checks in detach group vfio/iommu_type1: Populate full dirty when detach non-pinned group vfio/type1: block on invalid vaddr vfio/type1: implement notify callback vfio: iommu driver notify callback vfio/type1: implement interfaces to update vaddr vfio/type1: massage unmap iteration vfio: interfaces to update vaddr vfio/type1: implement unmap all vfio/type1: unmap cleanup ...

Linus Torvalds committed 5 years ago

Commit 719bbd42 parents c4fbde8 4d83de610 files · +475 −190Browse files

Showing the changes to include/uapi (1 of 10 files). Show all

Unified · Split

include/uapi/linux/vfio.h+27−0
@@ -46,6 +46,12 @@ · 45 unmodified lines
46 */46 */
47#define VFIO_NOIOMMU_IOMMU 847#define VFIO_NOIOMMU_IOMMU 8
48 48
49/* Supports VFIO_DMA_UNMAP_FLAG_ALL */
50#define VFIO_UNMAP_ALL 9
51
52/* Supports the vaddr flag for DMA map and unmap */
53#define VFIO_UPDATE_VADDR 10
54
49/*55/*
50 * The IOCTL interface is designed for extensibility by embedding the56 * The IOCTL interface is designed for extensibility by embedding the
51 * structure length (argsz) and flags into structures passed between57 * structure length (argsz) and flags into structures passed between
@@ -1074,12 +1080,22 @@ struct vfio_iommu_type1_info_dma_avail { · 1022 unmodified lines
1074 *1080 *
1075 * Map process virtual addresses to IO virtual addresses using the1081 * Map process virtual addresses to IO virtual addresses using the
1076 * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required.1082 * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required.
1083 *
1084 * If flags & VFIO_DMA_MAP_FLAG_VADDR, update the base vaddr for iova, and
1085 * unblock translation of host virtual addresses in the iova range. The vaddr
1086 * must have previously been invalidated with VFIO_DMA_UNMAP_FLAG_VADDR. To
1087 * maintain memory consistency within the user application, the updated vaddr
1088 * must address the same memory object as originally mapped. Failure to do so
1089 * will result in user memory corruption and/or device misbehavior. iova and
1090 * size must match those in the original MAP_DMA call. Protection is not
1091 * changed, and the READ & WRITE flags must be 0.
1077 */1092 */
1078struct vfio_iommu_type1_dma_map {1093struct vfio_iommu_type1_dma_map {
1079 __u32 argsz;1094 __u32 argsz;
1080 __u32 flags;1095 __u32 flags;
1081#define VFIO_DMA_MAP_FLAG_READ (1 << 0) /* readable from device */1096#define VFIO_DMA_MAP_FLAG_READ (1 << 0) /* readable from device */
1082#define VFIO_DMA_MAP_FLAG_WRITE (1 << 1) /* writable from device */1097#define VFIO_DMA_MAP_FLAG_WRITE (1 << 1) /* writable from device */
1098#define VFIO_DMA_MAP_FLAG_VADDR (1 << 2)
1083 __u64 vaddr; /* Process virtual address */1099 __u64 vaddr; /* Process virtual address */
1084 __u64 iova; /* IO virtual address */1100 __u64 iova; /* IO virtual address */
1085 __u64 size; /* Size of mapping (bytes) */1101 __u64 size; /* Size of mapping (bytes) */
@@ -1102,6 +1118,7 @@ struct vfio_bitmap { · 16 unmodified lines
1102 * field. No guarantee is made to the user that arbitrary unmaps of iova1118 * field. No guarantee is made to the user that arbitrary unmaps of iova
1103 * or size different from those used in the original mapping call will1119 * or size different from those used in the original mapping call will
1104 * succeed.1120 * succeed.
1121 *
1105 * VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP should be set to get the dirty bitmap1122 * VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP should be set to get the dirty bitmap
1106 * before unmapping IO virtual addresses. When this flag is set, the user must1123 * before unmapping IO virtual addresses. When this flag is set, the user must
1107 * provide a struct vfio_bitmap in data[]. User must provide zero-allocated1124 * provide a struct vfio_bitmap in data[]. User must provide zero-allocated
@@ -1111,11 +1128,21 @@ struct vfio_bitmap { · 3 unmodified lines
1111 * indicates that the page at that offset from iova is dirty. A Bitmap of the1128 * indicates that the page at that offset from iova is dirty. A Bitmap of the
1112 * pages in the range of unmapped size is returned in the user-provided1129 * pages in the range of unmapped size is returned in the user-provided
1113 * vfio_bitmap.data.1130 * vfio_bitmap.data.
1131 *
1132 * If flags & VFIO_DMA_UNMAP_FLAG_ALL, unmap all addresses. iova and size
1133 * must be 0. This cannot be combined with the get-dirty-bitmap flag.
1134 *
1135 * If flags & VFIO_DMA_UNMAP_FLAG_VADDR, do not unmap, but invalidate host
1136 * virtual addresses in the iova range. Tasks that attempt to translate an
1137 * iova's vaddr will block. DMA to already-mapped pages continues. This
1138 * cannot be combined with the get-dirty-bitmap flag.
1114 */1139 */
1115struct vfio_iommu_type1_dma_unmap {1140struct vfio_iommu_type1_dma_unmap {
1116 __u32 argsz;1141 __u32 argsz;
1117 __u32 flags;1142 __u32 flags;
1118#define VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP (1 << 0)1143#define VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP (1 << 0)
1144#define VFIO_DMA_UNMAP_FLAG_ALL (1 << 1)
1145#define VFIO_DMA_UNMAP_FLAG_VADDR (1 << 2)
1119 __u64 iova; /* IO virtual address */1146 __u64 iova; /* IO virtual address */
1120 __u64 size; /* Size of mapping (bytes) */1147 __u64 size; /* Size of mapping (bytes) */
1121 __u8 data[];1148 __u8 data[];