intel/dev/xe: Fix size of eu_per_dss_mask

Real Xe KMD actually returns a uint64, so here changing from uint32
to uint64.

Fixes: 04bdbeec31 ("intel/dev/xe: Fix access to eu_per_dss_mask")
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Acked-by: Nanley Chery <nanley.g.chery@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32527>
This commit is contained in:
José Roberto de Souza
2024-12-06 06:03:34 -08:00
committed by Marge Bot
parent 972f8aa287
commit 2aae000edb
+7 -6
View File
@@ -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;
}
}