mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 03:24:55 +08:00
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: Junwei Zhang <Jerry.Zhang@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
80f95c579d
commit
27f6d61036
@ -1704,12 +1704,14 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
|
||||
before = kzalloc(sizeof(*before), GFP_KERNEL);
|
||||
if (!before)
|
||||
return -ENOMEM;
|
||||
INIT_LIST_HEAD(&before->list);
|
||||
|
||||
after = kzalloc(sizeof(*after), GFP_KERNEL);
|
||||
if (!after) {
|
||||
kfree(before);
|
||||
return -ENOMEM;
|
||||
}
|
||||
INIT_LIST_HEAD(&after->list);
|
||||
|
||||
/* Now gather all removed mappings */
|
||||
it = interval_tree_iter_first(&vm->va, saddr, eaddr);
|
||||
@ -1719,7 +1721,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
|
||||
|
||||
/* Remember mapping split at the start */
|
||||
if (tmp->it.start < saddr) {
|
||||
before->it.start = tmp->it.start;;
|
||||
before->it.start = tmp->it.start;
|
||||
before->it.last = saddr - 1;
|
||||
before->offset = tmp->offset;
|
||||
before->flags = tmp->flags;
|
||||
@ -1754,8 +1756,8 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
|
||||
trace_amdgpu_vm_bo_unmap(NULL, tmp);
|
||||
}
|
||||
|
||||
/* Insert partial mapping before the range*/
|
||||
if (before->it.start != before->it.last) {
|
||||
/* Insert partial mapping before the range */
|
||||
if (!list_empty(&before->list)) {
|
||||
interval_tree_insert(&before->it, &vm->va);
|
||||
if (before->flags & AMDGPU_PTE_PRT)
|
||||
amdgpu_vm_prt_get(adev);
|
||||
@ -1764,7 +1766,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
|
||||
}
|
||||
|
||||
/* 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);
|
||||
if (after->flags & AMDGPU_PTE_PRT)
|
||||
amdgpu_vm_prt_get(adev);
|
||||
|
Loading…
Reference in New Issue
Block a user