mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
iommufd/selftest: Add a helper to get test device
There is need to get the selftest device (sobj->type == TYPE_IDEV) in multiple places, so have a helper to for it. Link: https://patch.msgid.link/r/20250321171940.7213-17-yi.l.liu@intel.com Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> Tested-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
9eb59204d5
commit
068e140251
|
|
@ -996,39 +996,49 @@ static int iommufd_test_mock_domain(struct iommufd_ucmd *ucmd,
|
|||
return rc;
|
||||
}
|
||||
|
||||
/* Replace the mock domain with a manually allocated hw_pagetable */
|
||||
static int iommufd_test_mock_domain_replace(struct iommufd_ucmd *ucmd,
|
||||
unsigned int device_id, u32 pt_id,
|
||||
struct iommu_test_cmd *cmd)
|
||||
static struct selftest_obj *
|
||||
iommufd_test_get_selftest_obj(struct iommufd_ctx *ictx, u32 id)
|
||||
{
|
||||
struct iommufd_object *dev_obj;
|
||||
struct selftest_obj *sobj;
|
||||
int rc;
|
||||
|
||||
/*
|
||||
* Prefer to use the OBJ_SELFTEST because the destroy_rwsem will ensure
|
||||
* it doesn't race with detach, which is not allowed.
|
||||
*/
|
||||
dev_obj =
|
||||
iommufd_get_object(ucmd->ictx, device_id, IOMMUFD_OBJ_SELFTEST);
|
||||
dev_obj = iommufd_get_object(ictx, id, IOMMUFD_OBJ_SELFTEST);
|
||||
if (IS_ERR(dev_obj))
|
||||
return PTR_ERR(dev_obj);
|
||||
return ERR_CAST(dev_obj);
|
||||
|
||||
sobj = to_selftest_obj(dev_obj);
|
||||
if (sobj->type != TYPE_IDEV) {
|
||||
rc = -EINVAL;
|
||||
goto out_dev_obj;
|
||||
iommufd_put_object(ictx, dev_obj);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
return sobj;
|
||||
}
|
||||
|
||||
/* Replace the mock domain with a manually allocated hw_pagetable */
|
||||
static int iommufd_test_mock_domain_replace(struct iommufd_ucmd *ucmd,
|
||||
unsigned int device_id, u32 pt_id,
|
||||
struct iommu_test_cmd *cmd)
|
||||
{
|
||||
struct selftest_obj *sobj;
|
||||
int rc;
|
||||
|
||||
sobj = iommufd_test_get_selftest_obj(ucmd->ictx, device_id);
|
||||
if (IS_ERR(sobj))
|
||||
return PTR_ERR(sobj);
|
||||
|
||||
rc = iommufd_device_replace(sobj->idev.idev, IOMMU_NO_PASID, &pt_id);
|
||||
if (rc)
|
||||
goto out_dev_obj;
|
||||
goto out_sobj;
|
||||
|
||||
cmd->mock_domain_replace.pt_id = pt_id;
|
||||
rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd));
|
||||
|
||||
out_dev_obj:
|
||||
iommufd_put_object(ucmd->ictx, dev_obj);
|
||||
out_sobj:
|
||||
iommufd_put_object(ucmd->ictx, &sobj->obj);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user