diff --git a/src/intel/dev/xe/intel_device_info.c b/src/intel/dev/xe/intel_device_info.c index 1fcfd082566..bfd78802b5f 100644 --- a/src/intel/dev/xe/intel_device_info.c +++ b/src/intel/dev/xe/intel_device_info.c @@ -186,7 +186,7 @@ static void xe_compute_topology(struct intel_device_info * devinfo, const uint8_t *geo_dss_mask, const uint32_t geo_dss_num_bytes, - const uint32_t *eu_per_dss_mask, + const uint32_t eu_per_dss_mask, const unsigned l3_banks) { intel_device_info_topology_reset_masks(devinfo); @@ -201,7 +201,7 @@ xe_compute_topology(struct intel_device_info * devinfo, devinfo->max_slices = 1; devinfo->max_subslices_per_slice = 6; } - devinfo->max_eus_per_subslice = __builtin_popcount(*eu_per_dss_mask); + devinfo->max_eus_per_subslice = __builtin_popcount(eu_per_dss_mask); devinfo->subslice_slice_stride = DIV_ROUND_UP(devinfo->max_slices, 8); devinfo->eu_slice_stride = DIV_ROUND_UP(devinfo->max_eus_per_subslice * devinfo->max_subslices_per_slice, 8); devinfo->eu_subslice_stride = DIV_ROUND_UP(devinfo->max_eus_per_subslice, 8); @@ -236,7 +236,7 @@ xe_compute_topology(struct intel_device_info * devinfo, for (uint32_t dss = 0; dss < devinfo->max_subslices_per_slice; dss++) { if ((1u << dss) & slices[s].dss_mask) { slices[s].dual_subslice[dss].enabled = true; - slices[s].dual_subslice[dss].eu_mask = *eu_per_dss_mask; + slices[s].dual_subslice[dss].eu_mask = eu_per_dss_mask; } } } @@ -285,7 +285,7 @@ xe_query_topology(int fd, struct intel_device_info *devinfo) if (!topology) return false; - uint32_t geo_dss_num_bytes = 0, *eu_per_dss_mask = NULL; + uint32_t geo_dss_num_bytes = 0, eu_per_dss_mask = 0; uint8_t *geo_dss_mask = NULL, *tmp; unsigned l3_banks = 0; const struct drm_xe_query_topology_mask *head = topology; @@ -306,7 +306,9 @@ xe_query_topology(int fd, struct intel_device_info *devinfo) break; case DRM_XE_TOPO_EU_PER_DSS: case DRM_XE_TOPO_SIMD16_EU_PER_DSS: - eu_per_dss_mask = (uint32_t *)topology->mask; + assert(topology->num_bytes <= sizeof(uint32_t)); + for (int i = 0; i < topology->num_bytes; i++) + eu_per_dss_mask |= topology->mask[i] << (8 * i); break; } }