diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index d4fcf5475464..7b840367004c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |||
@@ -330,26 +330,24 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, | |||
330 | 330 | ||
331 | r = amdgpu_bo_reserve(bo, true); | 331 | r = amdgpu_bo_reserve(bo, true); |
332 | if (r) | 332 | if (r) |
333 | goto free_pages; | 333 | goto user_pages_done; |
334 | 334 | ||
335 | amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT); | 335 | amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT); |
336 | r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); | 336 | r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); |
337 | amdgpu_bo_unreserve(bo); | 337 | amdgpu_bo_unreserve(bo); |
338 | if (r) | 338 | if (r) |
339 | goto free_pages; | 339 | goto user_pages_done; |
340 | } | 340 | } |
341 | 341 | ||
342 | r = drm_gem_handle_create(filp, gobj, &handle); | 342 | r = drm_gem_handle_create(filp, gobj, &handle); |
343 | /* drop reference from allocate - handle holds it now */ | ||
344 | drm_gem_object_put_unlocked(gobj); | ||
345 | if (r) | 343 | if (r) |
346 | return r; | 344 | goto user_pages_done; |
347 | 345 | ||
348 | args->handle = handle; | 346 | args->handle = handle; |
349 | return 0; | ||
350 | 347 | ||
351 | free_pages: | 348 | user_pages_done: |
352 | release_pages(bo->tbo.ttm->pages, bo->tbo.ttm->num_pages); | 349 | if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) |
350 | amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); | ||
353 | 351 | ||
354 | release_object: | 352 | release_object: |
355 | drm_gem_object_put_unlocked(gobj); | 353 | drm_gem_object_put_unlocked(gobj); |