mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
iommufd/selftest: Add coverage for reporting max_pasid_log2 via IOMMU_HW_INFO
IOMMU_HW_INFO is extended to report max_pasid_log2, hence add coverage for it. Link: https://patch.msgid.link/r/20250321180143.8468-6-yi.l.liu@intel.com Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> Tested-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
803f97298e
commit
6d9500bb1f
|
|
@ -342,12 +342,14 @@ FIXTURE(iommufd_ioas)
|
|||
uint32_t hwpt_id;
|
||||
uint32_t device_id;
|
||||
uint64_t base_iova;
|
||||
uint32_t device_pasid_id;
|
||||
};
|
||||
|
||||
FIXTURE_VARIANT(iommufd_ioas)
|
||||
{
|
||||
unsigned int mock_domains;
|
||||
unsigned int memory_limit;
|
||||
bool pasid_capable;
|
||||
};
|
||||
|
||||
FIXTURE_SETUP(iommufd_ioas)
|
||||
|
|
@ -372,6 +374,12 @@ FIXTURE_SETUP(iommufd_ioas)
|
|||
IOMMU_TEST_DEV_CACHE_DEFAULT);
|
||||
self->base_iova = MOCK_APERTURE_START;
|
||||
}
|
||||
|
||||
if (variant->pasid_capable)
|
||||
test_cmd_mock_domain_flags(self->ioas_id,
|
||||
MOCK_FLAGS_DEVICE_PASID,
|
||||
NULL, NULL,
|
||||
&self->device_pasid_id);
|
||||
}
|
||||
|
||||
FIXTURE_TEARDOWN(iommufd_ioas)
|
||||
|
|
@ -387,6 +395,7 @@ FIXTURE_VARIANT_ADD(iommufd_ioas, no_domain)
|
|||
FIXTURE_VARIANT_ADD(iommufd_ioas, mock_domain)
|
||||
{
|
||||
.mock_domains = 1,
|
||||
.pasid_capable = true,
|
||||
};
|
||||
|
||||
FIXTURE_VARIANT_ADD(iommufd_ioas, two_mock_domain)
|
||||
|
|
@ -752,6 +761,8 @@ TEST_F(iommufd_ioas, get_hw_info)
|
|||
} buffer_smaller;
|
||||
|
||||
if (self->device_id) {
|
||||
uint8_t max_pasid = 0;
|
||||
|
||||
/* Provide a zero-size user_buffer */
|
||||
test_cmd_get_hw_info(self->device_id, NULL, 0);
|
||||
/* Provide a user_buffer with exact size */
|
||||
|
|
@ -766,6 +777,13 @@ TEST_F(iommufd_ioas, get_hw_info)
|
|||
* the fields within the size range still gets updated.
|
||||
*/
|
||||
test_cmd_get_hw_info(self->device_id, &buffer_smaller, sizeof(buffer_smaller));
|
||||
test_cmd_get_hw_info_pasid(self->device_id, &max_pasid);
|
||||
ASSERT_EQ(0, max_pasid);
|
||||
if (variant->pasid_capable) {
|
||||
test_cmd_get_hw_info_pasid(self->device_pasid_id,
|
||||
&max_pasid);
|
||||
ASSERT_EQ(MOCK_PASID_WIDTH, max_pasid);
|
||||
}
|
||||
} else {
|
||||
test_err_get_hw_info(ENOENT, self->device_id,
|
||||
&buffer_exact, sizeof(buffer_exact));
|
||||
|
|
|
|||
|
|
@ -666,7 +666,8 @@ TEST_FAIL_NTH(basic_fail_nth, device)
|
|||
&self->stdev_id, NULL, &idev_id))
|
||||
return -1;
|
||||
|
||||
if (_test_cmd_get_hw_info(self->fd, idev_id, &info, sizeof(info), NULL))
|
||||
if (_test_cmd_get_hw_info(self->fd, idev_id, &info,
|
||||
sizeof(info), NULL, NULL))
|
||||
return -1;
|
||||
|
||||
if (_test_cmd_hwpt_alloc(self->fd, idev_id, ioas_id, 0,
|
||||
|
|
|
|||
|
|
@ -758,7 +758,8 @@ static void teardown_iommufd(int fd, struct __test_metadata *_metadata)
|
|||
|
||||
/* @data can be NULL */
|
||||
static int _test_cmd_get_hw_info(int fd, __u32 device_id, void *data,
|
||||
size_t data_len, uint32_t *capabilities)
|
||||
size_t data_len, uint32_t *capabilities,
|
||||
uint8_t *max_pasid)
|
||||
{
|
||||
struct iommu_test_hw_info *info = (struct iommu_test_hw_info *)data;
|
||||
struct iommu_hw_info cmd = {
|
||||
|
|
@ -803,6 +804,9 @@ static int _test_cmd_get_hw_info(int fd, __u32 device_id, void *data,
|
|||
assert(!info->flags);
|
||||
}
|
||||
|
||||
if (max_pasid)
|
||||
*max_pasid = cmd.out_max_pasid_log2;
|
||||
|
||||
if (capabilities)
|
||||
*capabilities = cmd.out_capabilities;
|
||||
|
||||
|
|
@ -811,14 +815,19 @@ static int _test_cmd_get_hw_info(int fd, __u32 device_id, void *data,
|
|||
|
||||
#define test_cmd_get_hw_info(device_id, data, data_len) \
|
||||
ASSERT_EQ(0, _test_cmd_get_hw_info(self->fd, device_id, data, \
|
||||
data_len, NULL))
|
||||
data_len, NULL, NULL))
|
||||
|
||||
#define test_err_get_hw_info(_errno, device_id, data, data_len) \
|
||||
EXPECT_ERRNO(_errno, _test_cmd_get_hw_info(self->fd, device_id, data, \
|
||||
data_len, NULL))
|
||||
data_len, NULL, NULL))
|
||||
|
||||
#define test_cmd_get_hw_capabilities(device_id, caps, mask) \
|
||||
ASSERT_EQ(0, _test_cmd_get_hw_info(self->fd, device_id, NULL, 0, &caps))
|
||||
ASSERT_EQ(0, _test_cmd_get_hw_info(self->fd, device_id, NULL, \
|
||||
0, &caps, NULL))
|
||||
|
||||
#define test_cmd_get_hw_info_pasid(device_id, max_pasid) \
|
||||
ASSERT_EQ(0, _test_cmd_get_hw_info(self->fd, device_id, NULL, \
|
||||
0, NULL, max_pasid))
|
||||
|
||||
static int _test_ioctl_fault_alloc(int fd, __u32 *fault_id, __u32 *fault_fd)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user