Commit 27f6d610 authored by Junwei Zhang's avatar Junwei Zhang Committed by Alex Deucher

drm/amdgpu: fix before and after mapping judgement for replace mapping

If the before mapping is 1 page size, so its start and last will be same.
Thus below condition will become false, then to free the before mapping.
   > if (before->it.start != before->it.last)
But in this case, we need the before mapping of 1 page size.
So does after mapping.
Signed-off-by: default avatarJunwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 80f95c57
...@@ -1704,12 +1704,14 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, ...@@ -1704,12 +1704,14 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
before = kzalloc(sizeof(*before), GFP_KERNEL); before = kzalloc(sizeof(*before), GFP_KERNEL);
if (!before) if (!before)
return -ENOMEM; return -ENOMEM;
INIT_LIST_HEAD(&before->list);
after = kzalloc(sizeof(*after), GFP_KERNEL); after = kzalloc(sizeof(*after), GFP_KERNEL);
if (!after) { if (!after) {
kfree(before); kfree(before);
return -ENOMEM; return -ENOMEM;
} }
INIT_LIST_HEAD(&after->list);
/* Now gather all removed mappings */ /* Now gather all removed mappings */
it = interval_tree_iter_first(&vm->va, saddr, eaddr); it = interval_tree_iter_first(&vm->va, saddr, eaddr);
...@@ -1719,7 +1721,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, ...@@ -1719,7 +1721,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
/* Remember mapping split at the start */ /* Remember mapping split at the start */
if (tmp->it.start < saddr) { if (tmp->it.start < saddr) {
before->it.start = tmp->it.start;; before->it.start = tmp->it.start;
before->it.last = saddr - 1; before->it.last = saddr - 1;
before->offset = tmp->offset; before->offset = tmp->offset;
before->flags = tmp->flags; before->flags = tmp->flags;
...@@ -1754,8 +1756,8 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, ...@@ -1754,8 +1756,8 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
trace_amdgpu_vm_bo_unmap(NULL, tmp); trace_amdgpu_vm_bo_unmap(NULL, tmp);
} }
/* Insert partial mapping before the range*/ /* Insert partial mapping before the range */
if (before->it.start != before->it.last) { if (!list_empty(&before->list)) {
interval_tree_insert(&before->it, &vm->va); interval_tree_insert(&before->it, &vm->va);
if (before->flags & AMDGPU_PTE_PRT) if (before->flags & AMDGPU_PTE_PRT)
amdgpu_vm_prt_get(adev); amdgpu_vm_prt_get(adev);
...@@ -1764,7 +1766,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, ...@@ -1764,7 +1766,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
} }
/* Insert partial mapping after the range */ /* Insert partial mapping after the range */
if (after->it.start != after->it.last) { if (!list_empty(&after->list)) {
interval_tree_insert(&after->it, &vm->va); interval_tree_insert(&after->it, &vm->va);
if (after->flags & AMDGPU_PTE_PRT) if (after->flags & AMDGPU_PTE_PRT)
amdgpu_vm_prt_get(adev); amdgpu_vm_prt_get(adev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment