diff
--- a/drivers/gpu/drm/xen/xen_drm_front_xengfx.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_xengfx.c
@@ -7,6 +7,9 @@
 	u16 pat_index = xe->pat.idx[XE_CACHE_WB];
 	u8 id = tile->id;
 	u32 num_entries = NUM_PT_SLOTS, num_level = vm->pt_root[id]->level;
+	if (num_level >= XE_MAX_PT_LEVELS) {
+		return -EINVAL;
+	}
 	u32 map_ofs, level, i;
 	struct xe_bo *bo, *batch = tile->mem.kernel_bb_pool->bo;
 	u64 entry;
@@ -95,12 +98,7 @@
 	}
 
 	for (level = 1; level < num_level; level++) {
-		u64 offset_multiplier = level - 1; 
-		u64 offset = offset_multiplier * XE_PAGE_SIZE; 
-		
-		if (offset / XE_PAGE_SIZE != offset_multiplier) {
-			/* Multiplication overflow */
-			return -EINVAL;
-		}
+		u32 offset = (level - 1) * XE_PAGE_SIZE; 
 
 		entry = vm->pt_ops->pde_encode_bo(bo, map_ofs + offset);
 		if (level + 1 == num_level) {

