summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_stub.c
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-10-20 18:55:41 +0200
committerDave Airlie <airlied@redhat.com>2013-11-06 05:53:23 +0100
commit4ac387f516bd3e5356cdb25266e244fa8a062281 (patch)
treef50c08aa8fdad6ff571711ba5b202ac11b5a58e3 /drivers/gpu/drm/drm_stub.c
parentdrm: call drm_unplug_minor() from drm_put_minor() (diff)
downloadlinux-4ac387f516bd3e5356cdb25266e244fa8a062281.tar.xz
linux-4ac387f516bd3e5356cdb25266e244fa8a062281.zip
drm: simplify drm_put_minor()
Allow passing NULL as minor to simplify DRM destruction paths. Also remove the double-pointer reset as it is no longer needed. drm_put_minor() is only called when the underlying object is destroyed. Hence, resetting minors to NULL is not necessary. As drm_put_minor() is no longer used by other DRM files, we can make it static, too. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_stub.c')
-rw-r--r--drivers/gpu/drm/drm_stub.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index ae3f293229ae..dd0cb02830f4 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -343,15 +343,17 @@ static void drm_unplug_minor(struct drm_minor *minor)
/**
* drm_put_minor - Destroy DRM minor
- * @minor_p: Double pointer to DRM minor
+ * @minor: Minor to destroy
*
- * This calls drm_unplug_minor() on the given minor and then frees it. The minor
- * pointer is reset to NULL before this returns.
+ * This calls drm_unplug_minor() on the given minor and then frees it. Nothing
+ * is done if @minor is NULL. It is fine to call this on already unplugged
+ * minors.
* The global DRM mutex must be held by the caller.
*/
-int drm_put_minor(struct drm_minor **minor_p)
+static void drm_put_minor(struct drm_minor *minor)
{
- struct drm_minor *minor = *minor_p;
+ if (!minor)
+ return;
DRM_DEBUG("release secondary minor %d\n", minor->index);
@@ -364,10 +366,7 @@ int drm_put_minor(struct drm_minor **minor_p)
idr_remove(&drm_minors_idr, minor->index);
kfree(minor);
- *minor_p = NULL;
- return 0;
}
-EXPORT_SYMBOL(drm_put_minor);
/**
* Called via drm_exit() at module unload time or when pci device is
@@ -562,13 +561,11 @@ err_unload:
if (dev->driver->unload)
dev->driver->unload(dev);
err_primary_node:
- drm_put_minor(&dev->primary);
+ drm_put_minor(dev->primary);
err_render_node:
- if (dev->render)
- drm_put_minor(&dev->render);
+ drm_put_minor(dev->render);
err_control_node:
- if (dev->control)
- drm_put_minor(&dev->control);
+ drm_put_minor(dev->control);
err_agp:
if (dev->driver->bus->agp_destroy)
dev->driver->bus->agp_destroy(dev);
@@ -603,11 +600,9 @@ void drm_dev_unregister(struct drm_device *dev)
list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
drm_rmmap(dev, r_list->map);
- if (dev->control)
- drm_put_minor(&dev->control);
- if (dev->render)
- drm_put_minor(&dev->render);
- drm_put_minor(&dev->primary);
+ drm_put_minor(dev->control);
+ drm_put_minor(dev->render);
+ drm_put_minor(dev->primary);
list_del(&dev->driver_item);
}