[igt-dev] [PATCH] tests/xe_huc_copy: Handle multiple GTs
Kamil Konieczny
kamil.konieczny at linux.intel.com
Thu Oct 5 20:09:45 UTC 2023
Hi Daniele,
On 2023-10-05 at 03:32:44 -0700, Daniele Ceraolo Spurio wrote:
> The test currently only looks for video engines on GT0, which is a
> problem because newer platforms (like MTL) have their video engines on
> the media GT. ALso, it is technically possible to have 1 HuC per-GT,
> though we don't currently have any platform that supports this.
> To handle the media GT use-case and to future proof against multiple
> HuCs, we can just loop and repeat the test on any GT that has video
> engines.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> ---
> tests/intel/xe_huc_copy.c | 26 ++++++++++++++++++++++----
> 1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/tests/intel/xe_huc_copy.c b/tests/intel/xe_huc_copy.c
> index c9891a729..1c1b9d72c 100644
> --- a/tests/intel/xe_huc_copy.c
> +++ b/tests/intel/xe_huc_copy.c
> @@ -104,9 +104,9 @@ gen12_create_batch_huc_copy(uint32_t *batch,
> */
>
> static void
> -test_huc_copy(int fd)
> +__test_huc_copy(int fd, uint32_t vm, struct drm_xe_engine_class_instance *hwe)
> {
> - uint32_t vm, exec_queue;
> + uint32_t exec_queue;
> char *dinput;
> struct drm_xe_sync sync = { 0 };
>
> @@ -117,8 +117,7 @@ test_huc_copy(int fd)
> { .addr = ADDR_BATCH, .size = SIZE_BATCH }, // batch
> };
>
> - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_ASYNC_BIND_OPS, 0);
> - exec_queue = xe_exec_queue_create_class(fd, vm, DRM_XE_ENGINE_CLASS_VIDEO_DECODE);
> + exec_queue = xe_exec_queue_create(fd, vm, hwe, 0);
> sync.flags = DRM_XE_SYNC_SYNCOBJ | DRM_XE_SYNC_SIGNAL;
> sync.handle = syncobj_create(fd, 0);
>
> @@ -148,6 +147,25 @@ test_huc_copy(int fd)
>
> syncobj_destroy(fd, sync.handle);
> xe_exec_queue_destroy(fd, exec_queue);
> +}
> +
> +static void
> +test_huc_copy(int fd)
> +{
> + struct drm_xe_engine_class_instance *hwe;
> + uint32_t vm;
> + uint32_t tested_gts = 0;
> +
> + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_ASYNC_BIND_OPS, 0);
> +
> + xe_for_each_hw_engine(fd, hwe) {
> + if (hwe->engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE &&
> + !(tested_gts & BIT(hwe->gt_id))) {
> + tested_gts |= BIT(hwe->gt_id);
> + __test_huc_copy(fd, vm, hwe);
> + }
> + }
> +
Please add here check if any huc was tested, maybe something like:
igt_require_f(tested_gts, "No video class engines found\n");
With that:
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> xe_vm_destroy(fd, vm);
> }
>
> --
> 2.41.0
>
More information about the igt-dev
mailing list