Commit c9587216 authored by Zhenzhong Duan's avatar Zhenzhong Duan Committed by Joerg Roedel
Browse files

iommufd/selftest: Test dirty tracking on PASID



Add test case for dirty tracking on a domain attached to PASID, also
confirm attachment to PASID fail if device doesn't support dirty tracking.

Suggested-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: default avatarZhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: default avatarYi Liu <yi.l.liu@intel.com>
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20260330101108.12594-5-zhenzhong.duan@intel.com


Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent ae2fafc1
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -2275,6 +2275,33 @@ TEST_F(iommufd_dirty_tracking, set_dirty_tracking)
	test_ioctl_destroy(hwpt_id);
}

TEST_F(iommufd_dirty_tracking, pasid_set_dirty_tracking)
{
	uint32_t stddev_id, ioas_id, hwpt_id, pasid = 100;
	uint32_t dev_flags = MOCK_FLAGS_DEVICE_PASID;

	/* Regular case */
	test_cmd_hwpt_alloc(self->idev_id, self->ioas_id,
			    IOMMU_HWPT_ALLOC_PASID | IOMMU_HWPT_ALLOC_DIRTY_TRACKING,
			    &hwpt_id);
	test_cmd_mock_domain_flags(hwpt_id, dev_flags, &stddev_id, NULL, NULL);
	ASSERT_EQ(0, _test_cmd_pasid_attach(self->fd, stddev_id, pasid, hwpt_id));
	test_cmd_set_dirty_tracking(hwpt_id, true);
	test_cmd_set_dirty_tracking(hwpt_id, false);
	ASSERT_EQ(0, _test_cmd_pasid_detach(self->fd, stddev_id, pasid));

	test_ioctl_destroy(stddev_id);

	/* IOMMU device does not support dirty tracking */
	dev_flags |= MOCK_FLAGS_DEVICE_NO_DIRTY;
	test_ioctl_ioas_alloc(&ioas_id);
	test_cmd_mock_domain_flags(ioas_id, dev_flags, &stddev_id, NULL, NULL);
	EXPECT_ERRNO(EINVAL, _test_cmd_pasid_attach(self->fd, stddev_id, pasid, hwpt_id));

	test_ioctl_destroy(stddev_id);
	test_ioctl_destroy(hwpt_id);
}

TEST_F(iommufd_dirty_tracking, device_dirty_capability)
{
	uint32_t caps = 0;