Revert "drm/i915: Unreference object not handle on creation"
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 6 Sep 2010 13:44:14 +0000 (14:44 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 6 Sep 2010 22:09:49 +0000 (23:09 +0100)
This reverts commit 86f100b136626e91f4f66f3776303475e2e58998.

The kref API requires the handlecount to be initialised to one on object
creation (so that kref_get() doesn't complain upon first use) so the
dalliance in the drivers is required in order to sink the initial
floating reference.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
drivers/gpu/drm/i915/i915_gem.c

index df5a7135c2614c8de55e309c5dfad82efcf618ac..68526f467c87eb0dfc29f7d4f4bd3126e901e2f8 100644 (file)
@@ -135,12 +135,15 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data,
                return -ENOMEM;
 
        ret = drm_gem_handle_create(file_priv, obj, &handle);
-       drm_gem_object_unreference_unlocked(obj);
-       if (ret)
+       if (ret) {
+               drm_gem_object_unreference_unlocked(obj);
                return ret;
+       }
 
-       args->handle = handle;
+       /* Sink the floating reference from kref_init(handlecount) */
+       drm_gem_object_handle_unreference_unlocked(obj);
 
+       args->handle = handle;
        return 0;
 }