diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch new file mode 100644 index 00000000..667c4349 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch @@ -0,0 +1,56 @@ +From 4bf8e9476e54233c1e2bd486a719e83ae7a73fe1 Mon Sep 17 00:00:00 2001 +From: Felix Kuehling <Felix.Kuehling@amd.com> +Date: Sat, 24 Nov 2018 22:46:23 -0500 +Subject: [PATCH 0850/2940] drm/amdgpu: Cast to uint64_t before left shift +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@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 90df2ff779d3..5141c359cc18 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; +@@ -1658,10 +1658,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; + 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); + +@@ -1674,7 +1674,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) { +-- +2.17.1 + |