diff options
author | Hans Verkuil <hverkuil-cisco@xs4all.nl> | 2019-03-01 12:11:27 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab+samsung@kernel.org> | 2019-03-19 18:29:37 +0100 |
commit | 218bf10e39ed5fb22a48dee40bfd2bbcb91693ba (patch) | |
tree | fae09b667509e0ed99447119c42b359186350360 /drivers/media/media-entity.c | |
parent | media: v4l2-subdev: add release() internal op (diff) | |
download | linux-218bf10e39ed5fb22a48dee40bfd2bbcb91693ba.tar.xz linux-218bf10e39ed5fb22a48dee40bfd2bbcb91693ba.zip |
media: v4l2-subdev: handle module refcounting here
The module ownership refcounting was done in media_entity_get/put,
but that was very confusing and it did not work either in case an
application had a v4l-subdevX device open and the module was
unbound. When the v4l-subdevX device was closed the media_entity_put
was never called and the module refcount was left one too high, making
it impossible to unload it.
Since v4l2-subdev.c was the only place where media_entity_get/put was
called, just move the functionality to v4l2-subdev.c and drop those
confusing entity functions.
Store the module in subdev_fh so module_put no longer depends on
the media_entity struct.
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Diffstat (limited to 'drivers/media/media-entity.c')
-rw-r--r-- | drivers/media/media-entity.c | 28 |
1 files changed, 0 insertions, 28 deletions
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index 0b1cb3559140..dd859d7b235a 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -17,7 +17,6 @@ */ #include <linux/bitmap.h> -#include <linux/module.h> #include <linux/property.h> #include <linux/slab.h> #include <media/media-entity.h> @@ -588,33 +587,6 @@ void media_pipeline_stop(struct media_entity *entity) EXPORT_SYMBOL_GPL(media_pipeline_stop); /* ----------------------------------------------------------------------------- - * Module use count - */ - -struct media_entity *media_entity_get(struct media_entity *entity) -{ - if (entity == NULL) - return NULL; - - if (entity->graph_obj.mdev->dev && - !try_module_get(entity->graph_obj.mdev->dev->driver->owner)) - return NULL; - - return entity; -} -EXPORT_SYMBOL_GPL(media_entity_get); - -void media_entity_put(struct media_entity *entity) -{ - if (entity == NULL) - return; - - if (entity->graph_obj.mdev->dev) - module_put(entity->graph_obj.mdev->dev->driver->owner); -} -EXPORT_SYMBOL_GPL(media_entity_put); - -/* ----------------------------------------------------------------------------- * Links management */ |