From 98918018f7e4e72ac46f0487adda231de1bb45e7 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 11 Feb 2009 14:26:28 +0000 Subject: [PATCH] --- yaml --- r: 131615 b: refs/heads/master c: 8d59bae5d9aae10ab230561519bfb97962509bcb h: refs/heads/master i: 131613: aae98da82f098244d9a898bf4e2d705874d617ce 131611: 0876156cec358249d63fa42468b13e87e1d3a276 131607: c8717db055f48deb225cda015ec04bd6f7debb74 131599: c796b16ad151d505634aabc203a405a8c74ae4f7 131583: 6e8b1d1241e9ff2723db50bebb17dbd1dde73969 v: v3 --- [refs] | 2 +- trunk/drivers/gpu/drm/drm_gem.c | 33 ++++++++++++++++----------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index b1e8be6f6136..021b674c77c5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a35f2e2b83a789e189a501ebd722bc9a1310eb05 +refs/heads/master: 8d59bae5d9aae10ab230561519bfb97962509bcb diff --git a/trunk/drivers/gpu/drm/drm_gem.c b/trunk/drivers/gpu/drm/drm_gem.c index e5a8ebf9a662..5dad6b9d0dec 100644 --- a/trunk/drivers/gpu/drm/drm_gem.c +++ b/trunk/drivers/gpu/drm/drm_gem.c @@ -301,27 +301,25 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, } spin_lock(&dev->object_name_lock); - if (obj->name) { - args->name = obj->name; + if (!obj->name) { + ret = idr_get_new_above(&dev->object_name_idr, obj, 1, + &obj->name); + args->name = (uint64_t) obj->name; spin_unlock(&dev->object_name_lock); - return 0; - } - ret = idr_get_new_above(&dev->object_name_idr, obj, 1, - &obj->name); - spin_unlock(&dev->object_name_lock); - if (ret == -EAGAIN) - goto again; - if (ret != 0) - goto err; + if (ret == -EAGAIN) + goto again; - /* - * Leave the reference from the lookup around as the - * name table now holds one - */ - args->name = (uint64_t) obj->name; + if (ret != 0) + goto err; - return 0; + /* Allocate a reference for the name table. */ + drm_gem_object_reference(obj); + } else { + args->name = (uint64_t) obj->name; + spin_unlock(&dev->object_name_lock); + ret = 0; + } err: mutex_lock(&dev->struct_mutex); @@ -452,6 +450,7 @@ drm_gem_object_handle_free(struct kref *kref) spin_lock(&dev->object_name_lock); if (obj->name) { idr_remove(&dev->object_name_idr, obj->name); + obj->name = 0; spin_unlock(&dev->object_name_lock); /* * The object name held a reference to this object, drop