drm/i915: Kill drop_pages()
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Aug 2016 06:52:28 +0000 (07:52 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Aug 2016 07:09:19 +0000 (08:09 +0100)
The drop_pages() function is a dangerous trap in that it can release the
passed in object pointer and so unless the caller is aware, it can
easily trick us into using the stale object afterwards. Move it into its
solitary callsite where we know it is safe.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470293567-10811-9-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem.c

index a38af9e58ec538de6b7a761142c7e9562bc06744..8892baaececd0d6d5617820fed1d23353ec06e5b 100644 (file)
@@ -306,20 +306,6 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
        return ret;
 }
 
-static int
-drop_pages(struct drm_i915_gem_object *obj)
-{
-       int ret;
-
-       i915_gem_object_get(obj);
-       ret = i915_gem_object_unbind(obj);
-       if (ret == 0)
-               ret = i915_gem_object_put_pages(obj);
-       i915_gem_object_put(obj);
-
-       return ret;
-}
-
 int
 i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
                            int align)
@@ -340,7 +326,11 @@ i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
        if (obj->base.filp == NULL)
                return -EINVAL;
 
-       ret = drop_pages(obj);
+       ret = i915_gem_object_unbind(obj);
+       if (ret)
+               return ret;
+
+       ret = i915_gem_object_put_pages(obj);
        if (ret)
                return ret;