Commit bd9dfa98 authored by David Herrmann's avatar David Herrmann

drm: move drm_put_minor() to drm_minor_free()

_put/get() are used for ref-counting, which we clearly don't do here.
Rename it to _free() and also use the common drm_minor_* prefix.
Furthermore, avoid passing the minor directly but instead use the type
like the other functions do, this allows us to reset the slot.

We also drop the redundant call to drm_unplug_minor() as drm_minor_free()
is only used from paths were that has already be called.
Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 05b701f6
...@@ -291,6 +291,17 @@ static int drm_minor_alloc(struct drm_device *dev, unsigned int type) ...@@ -291,6 +291,17 @@ static int drm_minor_alloc(struct drm_device *dev, unsigned int type)
return 0; return 0;
} }
static void drm_minor_free(struct drm_device *dev, unsigned int type)
{
struct drm_minor **slot;
slot = drm_minor_get_slot(dev, type);
if (*slot) {
kfree(*slot);
*slot = NULL;
}
}
/** /**
* drm_get_minor - Register DRM minor * drm_get_minor - Register DRM minor
* @dev: DRM device * @dev: DRM device
...@@ -413,26 +424,6 @@ void drm_minor_release(struct drm_minor *minor) ...@@ -413,26 +424,6 @@ void drm_minor_release(struct drm_minor *minor)
drm_dev_unref(minor->dev); drm_dev_unref(minor->dev);
} }
/**
* drm_put_minor - Destroy DRM minor
* @minor: Minor to destroy
*
* 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.
*/
static void drm_put_minor(struct drm_minor *minor)
{
if (!minor)
return;
DRM_DEBUG("release secondary minor %d\n", minor->index);
drm_unplug_minor(minor);
kfree(minor);
}
/** /**
* Called via drm_exit() at module unload time or when pci device is * Called via drm_exit() at module unload time or when pci device is
* unplugged. * unplugged.
...@@ -554,9 +545,9 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver, ...@@ -554,9 +545,9 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
err_ht: err_ht:
drm_ht_remove(&dev->map_hash); drm_ht_remove(&dev->map_hash);
err_minors: err_minors:
drm_put_minor(dev->control); drm_minor_free(dev, DRM_MINOR_LEGACY);
drm_put_minor(dev->render); drm_minor_free(dev, DRM_MINOR_RENDER);
drm_put_minor(dev->primary); drm_minor_free(dev, DRM_MINOR_CONTROL);
kfree(dev); kfree(dev);
return NULL; return NULL;
} }
...@@ -566,16 +557,16 @@ static void drm_dev_release(struct kref *ref) ...@@ -566,16 +557,16 @@ static void drm_dev_release(struct kref *ref)
{ {
struct drm_device *dev = container_of(ref, struct drm_device, ref); struct drm_device *dev = container_of(ref, struct drm_device, ref);
drm_put_minor(dev->control);
drm_put_minor(dev->render);
drm_put_minor(dev->primary);
if (dev->driver->driver_features & DRIVER_GEM) if (dev->driver->driver_features & DRIVER_GEM)
drm_gem_destroy(dev); drm_gem_destroy(dev);
drm_ctxbitmap_cleanup(dev); drm_ctxbitmap_cleanup(dev);
drm_ht_remove(&dev->map_hash); drm_ht_remove(&dev->map_hash);
drm_minor_free(dev, DRM_MINOR_LEGACY);
drm_minor_free(dev, DRM_MINOR_RENDER);
drm_minor_free(dev, DRM_MINOR_CONTROL);
kfree(dev->devname); kfree(dev->devname);
kfree(dev); kfree(dev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment