diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2014-11-06 14:34:31 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2014-12-02 15:37:21 +1000 |
commit | ec4da81990a4fe6360f84cedce7462c339b5e686 (patch) | |
tree | d9bf687eedc47abcb3d09ff3cbff8868e5fb199e /drm | |
parent | 814681488ada9bbeada3d2fc6f87964632d93f66 (diff) | |
download | nouveau-ec4da81990a4fe6360f84cedce7462c339b5e686.tar.gz |
drm: fix pin refcnt leak in failure path
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drm')
-rw-r--r-- | drm/nouveau_bo.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drm/nouveau_bo.c b/drm/nouveau_bo.c index d2a4768e3..d409b2660 100644 --- a/drm/nouveau_bo.c +++ b/drm/nouveau_bo.c @@ -333,22 +333,22 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype) nouveau_bo_placement_set(nvbo, memtype, 0); ret = nouveau_bo_validate(nvbo, false, false); - if (ret == 0) { - switch (bo->mem.mem_type) { - case TTM_PL_VRAM: - drm->gem.vram_available -= bo->mem.size; - break; - case TTM_PL_TT: - drm->gem.gart_available -= bo->mem.size; - break; - default: - break; - } + if (ret) + goto out; + + switch (bo->mem.mem_type) { + case TTM_PL_VRAM: + drm->gem.vram_available -= bo->mem.size; + break; + case TTM_PL_TT: + drm->gem.gart_available -= bo->mem.size; + break; + default: + break; } ref_inc: nvbo->pin_refcnt++; - out: ttm_bo_unreserve(bo); return ret; |