mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 03:48:59 +00:00
vfio: Support IO page table replacement
Now both the physical path and the emulated path can support an IO page table replacement. Call iommufd_device_replace/iommufd_access_replace(), when vdev->iommufd_attached is true. Also update the VFIO_DEVICE_ATTACH_IOMMUFD_PT kdoc in the uAPI header. Link: https://lore.kernel.org/r/b5f01956ff161f76aa52c95b0fa1ad6eaca95c4a.1690523699.git.nicolinc@nvidia.com Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
c154660b6e
commit
c157fd8861
@ -146,9 +146,9 @@ int vfio_iommufd_physical_attach_ioas(struct vfio_device *vdev, u32 *pt_id)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (vdev->iommufd_attached)
|
if (vdev->iommufd_attached)
|
||||||
return -EBUSY;
|
rc = iommufd_device_replace(vdev->iommufd_device, pt_id);
|
||||||
|
else
|
||||||
rc = iommufd_device_attach(vdev->iommufd_device, pt_id);
|
rc = iommufd_device_attach(vdev->iommufd_device, pt_id);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
vdev->iommufd_attached = true;
|
vdev->iommufd_attached = true;
|
||||||
@ -223,8 +223,9 @@ int vfio_iommufd_emulated_attach_ioas(struct vfio_device *vdev, u32 *pt_id)
|
|||||||
lockdep_assert_held(&vdev->dev_set->lock);
|
lockdep_assert_held(&vdev->dev_set->lock);
|
||||||
|
|
||||||
if (vdev->iommufd_attached)
|
if (vdev->iommufd_attached)
|
||||||
return -EBUSY;
|
rc = iommufd_access_replace(vdev->iommufd_access, *pt_id);
|
||||||
rc = iommufd_access_attach(vdev->iommufd_access, *pt_id);
|
else
|
||||||
|
rc = iommufd_access_attach(vdev->iommufd_access, *pt_id);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
vdev->iommufd_attached = true;
|
vdev->iommufd_attached = true;
|
||||||
|
@ -939,6 +939,12 @@ struct vfio_device_bind_iommufd {
|
|||||||
* Undo by VFIO_DEVICE_DETACH_IOMMUFD_PT or device fd close. This is only
|
* Undo by VFIO_DEVICE_DETACH_IOMMUFD_PT or device fd close. This is only
|
||||||
* allowed on cdev fds.
|
* allowed on cdev fds.
|
||||||
*
|
*
|
||||||
|
* If a vfio device is currently attached to a valid hw_pagetable, without doing
|
||||||
|
* a VFIO_DEVICE_DETACH_IOMMUFD_PT, a second VFIO_DEVICE_ATTACH_IOMMUFD_PT ioctl
|
||||||
|
* passing in another hw_pagetable (hwpt) id is allowed. This action, also known
|
||||||
|
* as a hw_pagetable replacement, will replace the device's currently attached
|
||||||
|
* hw_pagetable with a new hw_pagetable corresponding to the given pt_id.
|
||||||
|
*
|
||||||
* Return: 0 on success, -errno on failure.
|
* Return: 0 on success, -errno on failure.
|
||||||
*/
|
*/
|
||||||
struct vfio_device_attach_iommufd_pt {
|
struct vfio_device_attach_iommufd_pt {
|
||||||
|
Loading…
Reference in New Issue
Block a user