From 2aae000edb3e026047e8b9b6b30835eba9bd520e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 6 Dec 2024 06:03:34 -0800 Subject: [PATCH] intel/dev/xe: Fix size of eu_per_dss_mask MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Real Xe KMD actually returns a uint64, so here changing from uint32 to uint64. Fixes: 04bdbeec3116 ("intel/dev/xe: Fix access to eu_per_dss_mask") Reviewed-by: Caio Oliveira Acked-by: Nanley Chery Signed-off-by: José Roberto de Souza Part-of: --- src/intel/dev/xe/intel_device_info.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/intel/dev/xe/intel_device_info.c b/src/intel/dev/xe/intel_device_info.c index bfd78802b5f..a497cbfe63b 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 uint64_t eu_per_dss_mask, const unsigned l3_banks) { intel_device_info_topology_reset_masks(devinfo); @@ -214,7 +214,7 @@ xe_compute_topology(struct intel_device_info * devinfo, uint32_t dss_mask; struct { bool enabled; - uint32_t eu_mask; + uint64_t eu_mask; } dual_subslice[INTEL_DEVICE_MAX_SUBSLICES]; } slices[INTEL_DEVICE_MAX_SLICES] = {}; @@ -257,7 +257,7 @@ xe_compute_topology(struct intel_device_info * devinfo, ss / 8] |= (1u << (ss % 8)); for (unsigned eu = 0; eu < devinfo->max_eus_per_subslice; eu++) { - if (!(slices[s].dual_subslice[ss].eu_mask & (1u << eu))) + if (!(slices[s].dual_subslice[ss].eu_mask & (1ULL << eu))) continue; devinfo->eu_masks[s * devinfo->eu_slice_stride + @@ -285,7 +285,8 @@ 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 = 0; + uint64_t eu_per_dss_mask = 0; + uint32_t geo_dss_num_bytes = 0; uint8_t *geo_dss_mask = NULL, *tmp; unsigned l3_banks = 0; const struct drm_xe_query_topology_mask *head = topology; @@ -306,9 +307,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: - assert(topology->num_bytes <= sizeof(uint32_t)); + assert(topology->num_bytes <= sizeof(eu_per_dss_mask)); for (int i = 0; i < topology->num_bytes; i++) - eu_per_dss_mask |= topology->mask[i] << (8 * i); + eu_per_dss_mask |= ((uint64_t)topology->mask[i]) << (8 * i); break; } }