From: Nicolin Chen <[email protected]> The updated IOMMUFD VIOMMU_ALLOC uAPI allows userspace to provide a data buffer when creating a vIOMMU (e.g. for Tegra241 CMDQV). Extend iommufd_backend_alloc_viommu() to pass a user pointer and size to the kernel.
Update the caller accordingly. Signed-off-by: Nicolin Chen <[email protected]> Signed-off-by: Shameer Kolothum <[email protected]> --- backends/iommufd.c | 3 +++ hw/arm/smmuv3-accel.c | 4 ++-- include/system/iommufd.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backends/iommufd.c b/backends/iommufd.c index 938c8fe669..2f6fa832a7 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -459,6 +459,7 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id, bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be, uint32_t dev_id, uint32_t viommu_type, uint32_t hwpt_id, + void *data_ptr, uint32_t len, uint32_t *out_viommu_id, Error **errp) { int ret; @@ -467,6 +468,8 @@ bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be, uint32_t dev_id, .type = viommu_type, .dev_id = dev_id, .hwpt_id = hwpt_id, + .data_len = len, + .data_uptr = (uintptr_t)data_ptr, }; ret = ioctl(be->fd, IOMMU_VIOMMU_ALLOC, &alloc_viommu); diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 300c35ccb5..939898c9b0 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -503,8 +503,8 @@ smmuv3_accel_alloc_viommu(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, SMMUv3AccelState *accel; if (!iommufd_backend_alloc_viommu(idev->iommufd, idev->devid, - IOMMU_VIOMMU_TYPE_ARM_SMMUV3, - s2_hwpt_id, &viommu_id, errp)) { + IOMMU_VIOMMU_TYPE_ARM_SMMUV3, s2_hwpt_id, + NULL, 0, &viommu_id, errp)) { return false; } diff --git a/include/system/iommufd.h b/include/system/iommufd.h index 9770ff1484..a3e8087b3a 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -87,6 +87,7 @@ bool iommufd_backend_alloc_hwpt(IOMMUFDBackend *be, uint32_t dev_id, Error **errp); bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be, uint32_t dev_id, uint32_t viommu_type, uint32_t hwpt_id, + void *data_ptr, uint32_t len, uint32_t *out_hwpt, Error **errp); bool iommufd_backend_alloc_vdev(IOMMUFDBackend *be, uint32_t dev_id, -- 2.43.0
