Commit 395f9d89 authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

Merge patch series "Move group specific code into group.c"

Yi Liu <yi.l.liu@intel.com> says:

==================
With the introduction of iommufd, VFIO is towarding to provide device
centric uAPI after adapting to iommufd. With this trend, existing VFIO
group infrastructure is optional once VFIO converted to device centric.

This series moves the group specific code out of vfio_main.c, prepares
for compiling group infrastructure out after adding vfio device cdev[2]

[2] https://github.com/yiliu1765/iommufd/tree/wip/vfio_device_cdev
==================

Link: https://lore.kernel.org/all/20221201145535.589687-1-yi.l.liu@intel.com/


Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parents 90337f52 9eefba80
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ vfio_virqfd-y := virqfd.o
obj-$(CONFIG_VFIO) += vfio.o

vfio-y += vfio_main.o \
	  group.o \
	  iova_bitmap.o
vfio-$(CONFIG_IOMMUFD) += iommufd.o
vfio-$(CONFIG_VFIO_CONTAINER) += container.o
+13 −7
Original line number Diff line number Diff line
@@ -540,10 +540,12 @@ void vfio_group_unuse_container(struct vfio_group *group)
	fput(group->opened_file);
}

int vfio_container_pin_pages(struct vfio_container *container,
			     struct iommu_group *iommu_group, dma_addr_t iova,
			     int npage, int prot, struct page **pages)
int vfio_device_container_pin_pages(struct vfio_device *device,
				    dma_addr_t iova, int npage,
				    int prot, struct page **pages)
{
	struct vfio_container *container = device->group->container;
	struct iommu_group *iommu_group = device->group->iommu_group;
	struct vfio_iommu_driver *driver = container->iommu_driver;

	if (npage > VFIO_PIN_PAGES_MAX_ENTRIES)
@@ -555,9 +557,11 @@ int vfio_container_pin_pages(struct vfio_container *container,
				      npage, prot, pages);
}

void vfio_container_unpin_pages(struct vfio_container *container,
void vfio_device_container_unpin_pages(struct vfio_device *device,
				       dma_addr_t iova, int npage)
{
	struct vfio_container *container = device->group->container;

	if (WARN_ON(npage <= 0 || npage > VFIO_PIN_PAGES_MAX_ENTRIES))
		return;

@@ -565,9 +569,11 @@ void vfio_container_unpin_pages(struct vfio_container *container,
						  npage);
}

int vfio_container_dma_rw(struct vfio_container *container, dma_addr_t iova,
			  void *data, size_t len, bool write)
int vfio_device_container_dma_rw(struct vfio_device *device,
				 dma_addr_t iova, void *data,
				 size_t len, bool write)
{
	struct vfio_container *container = device->group->container;
	struct vfio_iommu_driver *driver = container->iommu_driver;

	if (unlikely(!driver || !driver->ops->dma_rw))

drivers/vfio/group.c

0 → 100644
+877 −0

File added.

Preview size limit exceeded, changes collapsed.

+38 −16

File changed.

Preview size limit exceeded, changes collapsed.

+57 −852

File changed.

Preview size limit exceeded, changes collapsed.