[PATCH i-g-t 6/8] tests/intel/xe_drm_fdinfo: Add an iterator for virtual engines
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Fri Jun 21 23:01:00 UTC 2024
Add a helper iterator for virtual engines.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
---
tests/intel/xe_drm_fdinfo.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/tests/intel/xe_drm_fdinfo.c b/tests/intel/xe_drm_fdinfo.c
index 8f8b4d599..2d25c2fbd 100644
--- a/tests/intel/xe_drm_fdinfo.c
+++ b/tests/intel/xe_drm_fdinfo.c
@@ -87,6 +87,34 @@ static const uint64_t batch_addr[] = {
0x1d0000,
0x1e0000,
};
+
+#define MAX_GTS 2
+#define MAX_INSTANCE 9
+struct virtual_hwe {
+ struct drm_xe_engine_class_instance eci[MAX_INSTANCE];
+ int count;
+} vhwe[MAX_GTS][DRM_XE_ENGINE_CLASS_COMPUTE + 1] = {};
+
+static void list_virtual_engines(int fd)
+{
+ struct drm_xe_engine_class_instance *hwe;
+
+ xe_for_each_engine(fd, hwe) {
+ struct virtual_hwe *v;
+
+ igt_assert(hwe->gt_id < MAX_GTS);
+ igt_assert(hwe->engine_class < DRM_XE_ENGINE_CLASS_COMPUTE + 1);
+ v = &vhwe[hwe->gt_id][hwe->engine_class];
+
+ igt_assert(v->count < MAX_INSTANCE);
+ v->eci[v->count++] = *hwe;
+ }
+}
+#define xe_for_each_multi_engine(__fd, __hwe, __count) \
+ for (int igt_unique(gt) = 0; igt_unique(gt) < MAX_GTS; igt_unique(gt)++) \
+ for (int igt_unique(c) = 0; igt_unique(c) < DRM_XE_ENGINE_CLASS_COMPUTE + 1; igt_unique(c)++) \
+ for_if((__hwe = &vhwe[igt_unique(gt)][igt_unique(c)].eci[0]) && ((__count = vhwe[igt_unique(gt)][igt_unique(c)].count) > 1))
+
static void read_engine_cycles(int xe, struct pceu_cycles *pceu)
{
struct drm_client_fdinfo info = { };
@@ -702,6 +730,7 @@ igt_main
igt_require(igt_parse_drm_fdinfo(xe, &info, NULL, 0, NULL, 0));
igt_require(info.num_engines);
+ list_virtual_engines(xe);
xe_for_each_engine(xe, hwe) {
num_engines++;
igt_assert(hwe->engine_class < ARRAY_SIZE(classes));
--
2.34.1
More information about the igt-dev
mailing list