Re: [RFC v2 11/17] media: Add release callback for media device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/19/2016 12:23 PM, Sakari Ailus wrote:
> The release callback may be used by the driver to signal the release of
> the media device. This makes it possible to embed a driver private struct
> to the same memory allocation.

This is a bit weird: you either add support for private data with a priv
pointer as in the previous patch, or you allow for larger structs.

Doing both doesn't seem right. In both cases you want the release callback,
so that's fine. But I think you should pick which method you want to keep
private data around.

I have a slight preference for a priv pointer, but I'm OK with either solution.

Regards,

	Hans

> 
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> ---
>  drivers/media/media-device.c | 11 ++++++++++-
>  include/media/media-device.h |  8 +++++++-
>  2 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
> index 27d5214..7f90cb82 100644
> --- a/drivers/media/media-device.c
> +++ b/drivers/media/media-device.c
> @@ -552,6 +552,9 @@ static void media_device_release(struct media_devnode *devnode)
>  	mutex_destroy(&mdev->graph_mutex);
>  	dev_dbg(devnode->parent, "Media device released\n");
>  
> +	if (mdev->release)
> +		mdev->release(mdev);
> +
>  	kfree(mdev);
>  }
>  
> @@ -699,10 +702,16 @@ void media_device_init(struct media_device *mdev)
>  }
>  EXPORT_SYMBOL_GPL(media_device_init);
>  
> -struct media_device *media_device_alloc(struct device *dev, void *priv)
> +struct media_device *media_device_alloc(struct device *dev, void *priv,
> +					size_t size)
>  {
>  	struct media_device *mdev;
>  
> +	if (!size)
> +		size = sizeof(*mdev);
> +	else if (WARN_ON(size < sizeof(*mdev)))
> +		return NULL;
> +
>  	dev = get_device(dev);
>  	if (!dev)
>  		return NULL;
> diff --git a/include/media/media-device.h b/include/media/media-device.h
> index cfcec1b..3b66232 100644
> --- a/include/media/media-device.h
> +++ b/include/media/media-device.h
> @@ -152,6 +152,7 @@ struct media_device {
>  
>  	int (*link_notify)(struct media_link *link, u32 flags,
>  			   unsigned int notification);
> +	void (*release)(struct media_device *mdev);
>  };
>  
>  /* We don't need to include pci.h or usb.h here */
> @@ -203,15 +204,20 @@ void media_device_init(struct media_device *mdev);
>   *
>   * @dev:	The associated struct device pointer
>   * @priv:	pointer to a driver private data structure
> + * @size:	size of a driver structure containing the media device
>   *
>   * Allocate and initialise a media device. Returns a media device.
>   * The media device is refcounted, and this function returns a media
>   * device the refcount of which is one (1).
>   *
> + * The size parameter can be zero if the media_device is not embedded
> + * in another struct.
> + *
>   * References are taken and given using media_device_get() and
>   * media_device_put().
>   */
> -struct media_device *media_device_alloc(struct device *dev, void *priv);
> +struct media_device *media_device_alloc(struct device *dev, void *priv,
> +					size_t size);
>  
>  /**
>   * media_device_get() - Get a reference to a media device
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux