Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The GGTT initialization path skips alignment validation and performs partial state updates before validation completes, which the new KUnit tests fail to detect.
--
--- Patch [7]: [PATCH v6 7/7] drm/xe/tests: Add KUnit tests for VF provisioning error handling ---
commit 5074ef2c8cf15b0dd4c9cdf94819ab386e4100b7
Author: Satyanarayana K V P <[email protected]>
drm/xe/tests: Add KUnit tests for VF provisioning error handling
This commit adds KUnit test cases for VF provisioning error handling. It
uses the xe_guc_mmio_send_recv() stub to inject bad KLV responses and
verifies that the VF can handle invalid configuration data.
> diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c
> new file mode 100644
> index 0000000000000..8cb7f3cebb311
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c
[ ... ]
> +struct config_ggtt {
> + u64 start_orig;
> + u64 start_query;
> + u64 size_orig;
> + u64 size_query;
> + int expected_ret;
> + int ret;
> + int flags;
> + const char *name;
> +} vf_ggtt_testcase[] = {
[ ... ]
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE - SZ_2K, .size_query = TEST_GGTT_SIZE - SZ_2K,
> + .expected_ret = -EINVAL, .flags = 0,
> + .name = "unaligned_size_4K",
> +
> + },
[Severity: High]
This is a pre-existing issue, but the new KUnit tests unintentionally mask
a bug in the early return path of vf_get_ggtt_info().
By setting size_orig to a non-zero value (TEST_GGTT_SIZE - SZ_2K) in this
unaligned test case, the test avoids the initial provisioning path. If
size_orig was set to 0 (which reflects the actual initial provisioning state),
the test would fail because vf_get_ggtt_info() incorrectly returns 0 instead
of -EINVAL.
Looking at vf_get_ggtt_info() in drivers/gpu/drm/xe/xe_gt_sriov_vf.c:
xe_tile_sriov_vf_ggtt_base_store(tile, start);
ggtt_size = xe_tile_sriov_vf_ggtt(tile);
if (!ggtt_size) {
/* ... */
xe_tile_sriov_vf_ggtt_store(tile, size);
return 0;
}
During initial provisioning (when ggtt_size is 0), unvalidated start and size
values are stored and the function returns early, completely bypassing the
IS_ALIGNED validation checks that occur later in the function.
Should the alignment checks in vf_get_ggtt_info() be moved before this early
return, and should these KUnit tests be updated to include scenarios where
size_orig is 0 to verify the initial provisioning path?
--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=7
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.