OSDN Git Service

drm/amdgpu: Fix a bug on flag table_freed
authorEric Huang <jinhuieric.huang@amd.com>
Sat, 29 May 2021 22:34:20 +0000 (18:34 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 2 Jun 2021 02:55:39 +0000 (22:55 -0400)
table_freed will be always true when mapping a memory with size
bigger than 2MB. The problem is page table's entries are always
existed, but existing mapping depends on page talbe's bo, so
using a check of page table's bo existed will resolve the issue.

Signed-off-by: Eric Huang <jinhuieric.huang@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

index c29fad9..1923f03 100644 (file)
@@ -1619,9 +1619,12 @@ static int amdgpu_vm_update_ptes(struct amdgpu_vm_update_params *params,
                         * completely covered by the range and so potentially still in use.
                         */
                        while (cursor.pfn < frag_start) {
-                               amdgpu_vm_free_pts(adev, params->vm, &cursor);
+                               /* Make sure previous mapping is freed */
+                               if (cursor.entry->base.bo) {
+                                       params->table_freed = true;
+                                       amdgpu_vm_free_pts(adev, params->vm, &cursor);
+                               }
                                amdgpu_vm_pt_next(adev, &cursor);
-                               params->table_freed = true;
                        }
 
                } else if (frag >= shift) {