drm/xe/migrate: fix batch buffer sizing
authorMatthew Auld <matthew.auld@intel.com>
Wed, 22 Oct 2025 16:38:33 +0000 (17:38 +0100)
committerMatthew Auld <matthew.auld@intel.com>
Thu, 23 Oct 2025 09:48:37 +0000 (10:48 +0100)
In xe_migrate_vram() the copy can straddle page boundaries, so the len
might look like a single page, but actually accounting for the offset
within the page we will need to emit more than one PTE. Otherwise in
some cases the batch buffer will be undersized leading to warnings
later.  We already have npages so use that instead.

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20251022163836.191405-5-matthew.auld@intel.com
drivers/gpu/drm/xe/xe_migrate.c

index ce5543f..fa87e0e 100644 (file)
@@ -1894,7 +1894,7 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
 
        xe_assert(xe, npages * PAGE_SIZE <= MAX_PREEMPTDISABLE_TRANSFER);
 
-       batch_size += pte_update_cmd_size(len);
+       batch_size += pte_update_cmd_size(npages << PAGE_SHIFT);
        batch_size += EMIT_COPY_DW;
 
        bb = xe_bb_new(gt, batch_size, use_usm_batch);