[PATCH i-g-t] xe_eudebug_online: Adjust bitmask calculation
Dominik Grzegorzek
dominik.grzegorzek at intel.com
Thu Feb 6 13:30:03 UTC 2025
Adjust bitmask calculation so it matches kernel changes which send also
zeros for fused out subslices.
Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
---
tests/intel/xe_eudebug_online.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/tests/intel/xe_eudebug_online.c b/tests/intel/xe_eudebug_online.c
index 30ecadfe0..2ccbd0a21 100644
--- a/tests/intel/xe_eudebug_online.c
+++ b/tests/intel/xe_eudebug_online.c
@@ -1187,8 +1187,9 @@ static int query_attention_bitmask_size(int fd, int gt)
.size = 0,
.data = 0,
};
- int pos = 0, eus;
- uint8_t *any_dss;
+ uint8_t dss_mask, last_dss;
+ int pos = 0;
+ int i, last_dss_idx;
thread_count_ptr = xe_hwconfig_lookup_value(fd, INTEL_HWCONFIG_NUM_THREADS_PER_EU,
&thread_count_len);
@@ -1231,22 +1232,27 @@ static int query_attention_bitmask_size(int fd, int gt)
igt_assert(g_dss && c_dss && eu_per_dss);
igt_assert_eq_u32(c_dss->num_bytes, g_dss->num_bytes);
- any_dss = malloc(c_dss->num_bytes);
- igt_assert(any_dss);
+ for (i = 0; i < c_dss->num_bytes; i++) {
+ dss_mask = c_dss->mask[i] | g_dss->mask[i];
+ if (dss_mask) {
+ last_dss = dss_mask;
+ last_dss_idx = i;
+ }
+ }
- for (int i = 0; i < c_dss->num_bytes; i++)
- any_dss[i] = c_dss->mask[i] | g_dss->mask[i];
+ last_dss_idx *= BITS_PER_BYTE;
+ do {
+ last_dss_idx++;
+ } while (last_dss >>= 1);
- eus = count_set_bits(any_dss, c_dss->num_bytes);
- eus *= count_set_bits(eu_per_dss->mask, eu_per_dss->num_bytes);
+ last_dss_idx *= count_set_bits(eu_per_dss->mask, eu_per_dss->num_bytes);
if (intel_gen_has_lockstep_eus(fd))
- eus /= 2;
+ last_dss_idx /= 2;
- free(any_dss);
free(topology);
- return eus * DIV_ROUND_UP(threads_per_eu, 8);
+ return last_dss_idx * DIV_ROUND_UP(threads_per_eu, 8);
}
static struct drm_xe_eudebug_event_exec_queue *
--
2.34.1
More information about the igt-dev
mailing list