[PATCH 2/3] drm/xe/migrate: don't overflow max copy size

Matthew Auld matthew.auld at intel.com
Thu Jul 31 09:17:36 UTC 2025


On 30/07/2025 19:25, Summers, Stuart wrote:
> On Wed, 2025-07-30 at 15:33 +0100, Matthew Auld wrote:
>> With non-page aligned copy, we need to use byte aligned pitch,
>> however
>> the size itself might still be close to our maximum of ~8M, and so
>> the
>> dimensions of the copy can easily exceed the S16_MAX limit of the
>> copy
>> command leading to the following assert:
>>
>> xe 0000:03:00.0: [drm] Assertion `size / pitch <= ((s16)(((u16)~0U)
>>>> 1))` failed!
>> platform: BATTLEMAGE subplatform: 1
>> graphics: Xe2_HPG 20.01 step A0
>> media: Xe2_HPM 13.01 step A1
>> tile: 0 VRAM 10.0 GiB
>> GT: 0 type 1
>>
>> WARNING: CPU: 23 PID: 10605 at drivers/gpu/drm/xe/xe_migrate.c:673
>> emit_copy+0x4b5/0x4e0 [xe]
>>
>> To fix this account for the pitch when calculating the number of
>> current
>> bytes to copy.
>>
>> Fixes: 270172f64b11 ("drm/xe: Update xe_ttm_access_memory to use GPU
>> for non-visible access")
>> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
>> Cc: Maciej Patelczyk <maciej.patelczyk at intel.com>
>> Cc: Matthew Brost <matthew.brost at intel.com>
>> ---
>>   drivers/gpu/drm/xe/xe_migrate.c | 6 ++++++
>>   1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_migrate.c
>> b/drivers/gpu/drm/xe/xe_migrate.c
>> index b6bdc9bd32b0..daca18b5b45f 100644
>> --- a/drivers/gpu/drm/xe/xe_migrate.c
>> +++ b/drivers/gpu/drm/xe/xe_migrate.c
>> @@ -2056,6 +2056,12 @@ int xe_migrate_access_memory(struct xe_migrate
>> *m, struct xe_bo *bo,
>>                  else
>>                          current_bytes = min_t(int, bytes_left,
>> cursor.size);
>>   
>> +               if (current_bytes & ~PAGE_MASK) {
>> +                       int pitch = 4;
> 
> This 4 is ndwords right? It would be nice to have a macro here instead
> of just assuming that all over this file. But not a review blocker..

In this case it's 4 bytes, so one dword. Yeah, it is a bit ugly.

> 
> Reviewed-by: Stuart Summers <stuart.summers at intel.com>

Thanks.

> 
>> +
>> +                       current_bytes = min_t(int, current_bytes,
>> S16_MAX * pitch);
>> +               }
>> +
>>                  if (fence)
>>                          dma_fence_put(fence);
>>   
> 



More information about the Intel-xe mailing list