diff options
author | 2012-07-11 16:28:19 +1000 | |
---|---|---|
committer | 2012-10-03 13:12:48 +1000 | |
commit | 496734bf0391f38c196e16dbbfaaeda8e6ec5845 (patch) | |
tree | eaf17ad25eb57a101d1265a452f6b399882d9919 /drivers/gpu/drm/nouveau/core/subdev/vm/base.c | |
parent | drm/nouveau/timer: port to subdev interfaces (diff) | |
download | linux-dev-496734bf0391f38c196e16dbbfaaeda8e6ec5845.tar.xz linux-dev-496734bf0391f38c196e16dbbfaaeda8e6ec5845.zip |
drm/nouveau/core: add support for reverse mm allocations
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/core/subdev/vm/base.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/core/subdev/vm/base.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/gpu/drm/nouveau/core/subdev/vm/base.c b/drivers/gpu/drm/nouveau/core/subdev/vm/base.c index 3d11a4aa39ef..9fb858a21abb 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/vm/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/vm/base.c @@ -282,7 +282,8 @@ nouveau_vm_get(struct nouveau_vm *vm, u64 size, u32 page_shift, int ret; mutex_lock(&vm->mm.mutex); - ret = nouveau_mm_get(&vm->mm, page_shift, msize, 0, align, &vma->node); + ret = nouveau_mm_head(&vm->mm, page_shift, msize, msize, align, + &vma->node); if (unlikely(ret != 0)) { mutex_unlock(&vm->mm.mutex); return ret; @@ -303,9 +304,8 @@ nouveau_vm_get(struct nouveau_vm *vm, u64 size, u32 page_shift, if (ret) { if (pde != fpde) nouveau_vm_unmap_pgt(vm, big, fpde, pde - 1); - nouveau_mm_put(&vm->mm, vma->node); + nouveau_mm_free(&vm->mm, &vma->node); mutex_unlock(&vm->mm.mutex); - vma->node = NULL; return ret; } } @@ -330,8 +330,7 @@ nouveau_vm_put(struct nouveau_vma *vma) mutex_lock(&vm->mm.mutex); nouveau_vm_unmap_pgt(vm, vma->node->type != vm->spg_shift, fpde, lpde); - nouveau_mm_put(&vm->mm, vma->node); - vma->node = NULL; + nouveau_mm_free(&vm->mm, &vma->node); mutex_unlock(&vm->mm.mutex); } |