Merge tag 'drm-for-v4.15' of git://people.freedesktop.org/~airlied/linux
[linux-2.6-block.git] / drivers / gpu / drm / i915 / i915_gem_userptr.c
index 9afeb68e2d448edfbf5e2d7610309380163f8546..135fc750a8375f172e130c6b45b85747535693d9 100644 (file)
@@ -83,10 +83,10 @@ static void cancel_userptr(struct work_struct *work)
        if (i915_gem_object_unbind(obj) == 0)
                __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
        WARN_ONCE(i915_gem_object_has_pages(obj),
-                 "Failed to release pages: bind_count=%d, pages_pin_count=%d, pin_display=%d\n",
+                 "Failed to release pages: bind_count=%d, pages_pin_count=%d, pin_global=%d\n",
                  obj->bind_count,
                  atomic_read(&obj->mm.pages_pin_count),
-                 obj->pin_display);
+                 obj->pin_global);
 
        mutex_unlock(&obj->base.dev->struct_mutex);
 
@@ -221,15 +221,17 @@ i915_mmu_notifier_find(struct i915_mm_struct *mm)
                        /* Protected by mm_lock */
                        mm->mn = fetch_and_zero(&mn);
                }
-       } else {
-               /* someone else raced and successfully installed the mmu
-                * notifier, we can cancel our own errors */
+       } else if (mm->mn) {
+               /*
+                * Someone else raced and successfully installed the mmu
+                * notifier, we can cancel our own errors.
+                */
                err = 0;
        }
        mutex_unlock(&mm->i915->mm_lock);
        up_write(&mm->mm->mmap_sem);
 
-       if (mn) {
+       if (mn && !IS_ERR(mn)) {
                destroy_workqueue(mn->wq);
                kfree(mn);
        }
@@ -545,7 +547,7 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
        }
        mutex_unlock(&obj->mm.lock);
 
-       release_pages(pvec, pinned, 0);
+       release_pages(pvec, pinned);
        kvfree(pvec);
 
        i915_gem_object_put(obj);
@@ -658,7 +660,7 @@ static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
                __i915_gem_userptr_set_active(obj, true);
 
        if (IS_ERR(pages))
-               release_pages(pvec, pinned, 0);
+               release_pages(pvec, pinned);
        kvfree(pvec);
 
        return PTR_ERR_OR_ZERO(pages);