mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
iommufd/viommu: Allow driver-specific user data for a vIOMMU object
The new type of vIOMMU for tegra241-cmdqv driver needs a driver-specific user data. So, add data_len/uptr to the iommu_viommu_alloc uAPI and pass it in via the viommu_init iommu op. Link: https://patch.msgid.link/r/2315b0e164b355746387e960745ac9154caec124.1752126748.git.nicolinc@nvidia.com Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com> Acked-by: Pranjal Shrivastava <praan@google.com> Acked-by: Alok Tiwari <alok.a.tiwari@oracle.com> Reviewed-by: Vasant Hegde <vasant.hegde@amd.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
c3436d42f8
commit
1976cdf61c
|
|
@ -17,6 +17,11 @@ void iommufd_viommu_destroy(struct iommufd_object *obj)
|
|||
int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
|
||||
{
|
||||
struct iommu_viommu_alloc *cmd = ucmd->cmd;
|
||||
const struct iommu_user_data user_data = {
|
||||
.type = cmd->type,
|
||||
.uptr = u64_to_user_ptr(cmd->data_uptr),
|
||||
.len = cmd->data_len,
|
||||
};
|
||||
struct iommufd_hwpt_paging *hwpt_paging;
|
||||
struct iommufd_viommu *viommu;
|
||||
struct iommufd_device *idev;
|
||||
|
|
@ -84,7 +89,8 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
|
|||
*/
|
||||
viommu->iommu_dev = __iommu_get_iommu_dev(idev->dev);
|
||||
|
||||
rc = ops->viommu_init(viommu, hwpt_paging->common.domain, NULL);
|
||||
rc = ops->viommu_init(viommu, hwpt_paging->common.domain,
|
||||
user_data.len ? &user_data : NULL);
|
||||
if (rc)
|
||||
goto out_put_hwpt;
|
||||
|
||||
|
|
|
|||
|
|
@ -965,6 +965,9 @@ enum iommu_viommu_type {
|
|||
* @dev_id: The device's physical IOMMU will be used to back the virtual IOMMU
|
||||
* @hwpt_id: ID of a nesting parent HWPT to associate to
|
||||
* @out_viommu_id: Output virtual IOMMU ID for the allocated object
|
||||
* @data_len: Length of the type specific data
|
||||
* @__reserved: Must be 0
|
||||
* @data_uptr: User pointer to a driver-specific virtual IOMMU data
|
||||
*
|
||||
* Allocate a virtual IOMMU object, representing the underlying physical IOMMU's
|
||||
* virtualization support that is a security-isolated slice of the real IOMMU HW
|
||||
|
|
@ -985,6 +988,9 @@ struct iommu_viommu_alloc {
|
|||
__u32 dev_id;
|
||||
__u32 hwpt_id;
|
||||
__u32 out_viommu_id;
|
||||
__u32 data_len;
|
||||
__u32 __reserved;
|
||||
__aligned_u64 data_uptr;
|
||||
};
|
||||
#define IOMMU_VIOMMU_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VIOMMU_ALLOC)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user