[PATCH 1/2] drm/amdgpu: Cast to uint64_t before left shift
Christian König
ckoenig.leichtzumerken at gmail.com
Tue Nov 27 09:37:45 UTC 2018
Am 26.11.18 um 23:01 schrieb Kuehling, Felix:
> Avoid potential integer overflows with left shift in huge-page mapping
> code by casting the operand to uin64_t first.
>
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index dad0e23..be3e360 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -181,7 +181,7 @@ static unsigned amdgpu_vm_num_entries(struct amdgpu_device *adev,
>
> if (level == adev->vm_manager.root_level)
> /* For the root directory */
> - return round_up(adev->vm_manager.max_pfn, 1 << shift) >> shift;
> + return round_up(adev->vm_manager.max_pfn, 1ULL << shift) >> shift;
> else if (level != AMDGPU_VM_PTB)
> /* Everything in between */
> return 512;
> @@ -1666,10 +1666,10 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
> }
>
> /* Looks good so far, calculate parameters for the update */
> - incr = AMDGPU_GPU_PAGE_SIZE << shift;
> + incr = (uint64_t)AMDGPU_GPU_PAGE_SIZE << shift;
I wonder if it doesn't make more sense to make the definition of
AMDGPU_GPU_PAGE_SIZE 64bit?
Anyway the patch is Reviewed-by: Christian König
<christian.koenig at amd.com> for now.
Regards,
Christian.
> mask = amdgpu_vm_entries_mask(adev, cursor.level);
> pe_start = ((cursor.pfn >> shift) & mask) * 8;
> - entry_end = (mask + 1) << shift;
> + entry_end = (uint64_t)(mask + 1) << shift;
> entry_end += cursor.pfn & ~(entry_end - 1);
> entry_end = min(entry_end, end);
>
> @@ -1682,7 +1682,7 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
> flags | AMDGPU_PTE_FRAG(frag));
>
> pe_start += nptes * 8;
> - dst += nptes * AMDGPU_GPU_PAGE_SIZE << shift;
> + dst += (uint64_t)nptes * AMDGPU_GPU_PAGE_SIZE << shift;
>
> frag_start = upd_end;
> if (frag_start >= frag_end) {
More information about the amd-gfx
mailing list