const struct i915_ggtt_view *view,
                            u64 size, u64 alignment, u64 flags);
 
-static inline struct i915_vma * __must_check
+struct i915_vma * __must_check
 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
                         const struct i915_ggtt_view *view,
-                        u64 size, u64 alignment, u64 flags)
-{
-       return i915_gem_object_ggtt_pin_ww(obj, NULL, view, size, alignment, flags);
-}
+                        u64 size, u64 alignment, u64 flags);
 
 int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
                           unsigned long flags);
 
        struct i915_vma *vma;
        int ret;
 
+       GEM_WARN_ON(!ww);
+
        if (flags & PIN_MAPPABLE &&
            (!view || view->type == I915_GGTT_VIEW_NORMAL)) {
                /*
                        return ERR_PTR(ret);
        }
 
-       if (ww)
-               ret = i915_vma_pin_ww(vma, ww, size, alignment, flags | PIN_GLOBAL);
-       else
-               ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL);
+       ret = i915_vma_pin_ww(vma, ww, size, alignment, flags | PIN_GLOBAL);
 
        if (ret)
                return ERR_PTR(ret);
        return vma;
 }
 
+struct i915_vma * __must_check
+i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
+                        const struct i915_ggtt_view *view,
+                        u64 size, u64 alignment, u64 flags)
+{
+       struct i915_gem_ww_ctx ww;
+       struct i915_vma *ret;
+       int err;
+
+       for_i915_gem_ww(&ww, err, true) {
+               err = i915_gem_object_lock(obj, &ww);
+               if (err)
+                       continue;
+
+               ret = i915_gem_object_ggtt_pin_ww(obj, &ww, view, size,
+                                                 alignment, flags);
+               if (IS_ERR(ret))
+                       err = PTR_ERR(ret);
+       }
+
+       return err ? ERR_PTR(err) : ret;
+}
+
 int
 i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
                       struct drm_file *file_priv)