Merge tag 'v4.6-rc3' into drm-intel-next-queued
[cascardo/linux.git] / drivers / gpu / drm / i915 / i915_gem_userptr.c
index 18ba813..0f94b6c 100644 (file)
@@ -494,10 +494,7 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
        ret = -ENOMEM;
        pinned = 0;
 
-       pvec = kmalloc(npages*sizeof(struct page *),
-                      GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
-       if (pvec == NULL)
-               pvec = drm_malloc_ab(npages, sizeof(struct page *));
+       pvec = drm_malloc_gfp(npages, sizeof(struct page *), GFP_TEMPORARY);
        if (pvec != NULL) {
                struct mm_struct *mm = obj->userptr.mm->mm;
 
@@ -634,14 +631,11 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
        pvec = NULL;
        pinned = 0;
        if (obj->userptr.mm->mm == current->mm) {
-               pvec = kmalloc(num_pages*sizeof(struct page *),
-                              GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
+               pvec = drm_malloc_gfp(num_pages, sizeof(struct page *),
+                                     GFP_TEMPORARY);
                if (pvec == NULL) {
-                       pvec = drm_malloc_ab(num_pages, sizeof(struct page *));
-                       if (pvec == NULL) {
-                               __i915_gem_userptr_set_active(obj, false);
-                               return -ENOMEM;
-                       }
+                       __i915_gem_userptr_set_active(obj, false);
+                       return -ENOMEM;
                }
 
                pinned = __get_user_pages_fast(obj->userptr.ptr, num_pages,
@@ -758,6 +752,13 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file
        int ret;
        u32 handle;
 
+       if (!HAS_LLC(dev) && !HAS_SNOOP(dev)) {
+               /* We cannot support coherent userptr objects on hw without
+                * LLC and broken snooping.
+                */
+               return -ENODEV;
+       }
+
        if (args->flags & ~(I915_USERPTR_READ_ONLY |
                            I915_USERPTR_UNSYNCHRONIZED))
                return -EINVAL;