Am 16.03.2017 um 09:13 schrieb Junwei Zhang: > 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 at amd.com> Reviewed-by: Christian König <christian.koenig at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index f7c02a9..e95adec 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -1748,12 +1748,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); > @@ -1763,7 +1765,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; > @@ -1799,8 +1801,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); > @@ -1809,7 +1811,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);