diff options
author | Yi Liu <yi.l.liu@intel.com> | 2022-11-10 18:57:01 -0800 |
---|---|---|
committer | Jason Gunthorpe <jgg@nvidia.com> | 2022-12-05 08:56:01 -0400 |
commit | 8da7a0e79f9b15330ae68d8532425399f4c27045 (patch) | |
tree | d08374512e4b256f706c14db3157a10744a78996 /drivers/vfio/container.c | |
parent | 1334e47ee798ac4715330a6ade0afc929cd54aff (diff) | |
download | linux-next-8da7a0e79f9b15330ae68d8532425399f4c27045.tar.gz |
vfio: Refactor dma APIs for emulated devices
To use group helpers instead of opening group related code in the
API. This prepares moving group specific code out of vfio_main.c.
Link: https://lore.kernel.org/r/20221201145535.589687-10-yi.l.liu@intel.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Tested-by: Lixiao Yang <lixiao.yang@intel.com>
Tested-by: Yu He <yu.he@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'drivers/vfio/container.c')
-rw-r--r-- | drivers/vfio/container.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/vfio/container.c b/drivers/vfio/container.c index 6b362d97d682..b7a9560ab25e 100644 --- a/drivers/vfio/container.c +++ b/drivers/vfio/container.c @@ -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, - dma_addr_t iova, int npage) +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)) |