]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
Merge tag 'for-airlie-tda998x' of git://git.armlinux.org.uk/~rmk/linux-arm into drm...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_gem.c
index d4fcf5475464645f0661f4aea7c69e69b5dd96df..37b526c6f494856dcd7ed56a8bdad535c76fc88e 100644 (file)
  *          Jerome Glisse
  */
 #include <linux/ktime.h>
+#include <linux/module.h>
 #include <linux/pagemap.h>
-#include <drm/drmP.h>
+#include <linux/pci.h>
+
 #include <drm/amdgpu_drm.h>
+#include <drm/drm_debugfs.h>
+
 #include "amdgpu.h"
 #include "amdgpu_display.h"
 #include "amdgpu_xgmi.h"
@@ -171,7 +175,7 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj,
 
        amdgpu_vm_get_pd_bo(vm, &list, &vm_pd);
 
-       r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates);
+       r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, true);
        if (r) {
                dev_err(adev->dev, "leaking bo va because "
                        "we fail to reserve bo (%d)\n", r);
@@ -330,26 +334,24 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
 
                r = amdgpu_bo_reserve(bo, true);
                if (r)
-                       goto free_pages;
+                       goto user_pages_done;
 
                amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT);
                r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
                amdgpu_bo_unreserve(bo);
                if (r)
-                       goto free_pages;
+                       goto user_pages_done;
        }
 
        r = drm_gem_handle_create(filp, gobj, &handle);
-       /* drop reference from allocate - handle holds it now */
-       drm_gem_object_put_unlocked(gobj);
        if (r)
-               return r;
+               goto user_pages_done;
 
        args->handle = handle;
-       return 0;
 
-free_pages:
-       release_pages(bo->tbo.ttm->pages, bo->tbo.ttm->num_pages);
+user_pages_done:
+       if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE)
+               amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
 
 release_object:
        drm_gem_object_put_unlocked(gobj);
@@ -610,7 +612,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,
 
        amdgpu_vm_get_pd_bo(&fpriv->vm, &list, &vm_pd);
 
-       r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates);
+       r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, true);
        if (r)
                goto error_unref;
 
This page took 0.035103 seconds and 4 git commands to generate.