All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org, Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Subject: Re: [PATCH 01/38] iio: Use macro magic to avoid manual assign of driver_module
Date: Sat, 3 Jun 2017 09:37:36 +0100	[thread overview]
Message-ID: <20170603093736.2d9e0d03@kernel.org> (raw)
In-Reply-To: <20170529155154.22580-2-jic23@kernel.org>

On Mon, 29 May 2017 16:51:17 +0100
Jonathan Cameron <jic23@kernel.org> wrote:

> Starting point in boiler plate reduction similar to that done for
> many similar cases elsewhere in the kernel.
> 
> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Hi all,

I've been slightly less lazy than last week and added some cc's.

If any of you lovely people have a bit of time to take a look at
the first two patches in this series that would be great.

I'm definitely looking for a acked-by or reviewed-by on this series
before applying.

Thanks,

Jonathan
> ---
>  drivers/iio/industrialio-core.c    | 35 +++++++++--------------------------
>  drivers/iio/industrialio-trigger.c |  6 +++---
>  include/linux/iio/iio.h            | 31 +++++++++++++++++++++++++++++--
>  3 files changed, 41 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index 4a1de59d153a..62dafa4414e3 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1665,14 +1665,11 @@ static int iio_check_unique_scan_index(struct iio_dev *indio_dev)
>  
>  static const struct iio_buffer_setup_ops noop_ring_setup_ops;
>  
> -/**
> - * iio_device_register() - register a device with the IIO subsystem
> - * @indio_dev:		Device structure filled by the device driver
> - **/
> -int iio_device_register(struct iio_dev *indio_dev)
> +int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
>  {
>  	int ret;
>  
> +	indio_dev->driver_module = this_mod;
>  	/* If the calling driver did not initialize of_node, do it here */
>  	if (!indio_dev->dev.of_node && indio_dev->dev.parent)
>  		indio_dev->dev.of_node = indio_dev->dev.parent->of_node;
> @@ -1718,7 +1715,8 @@ int iio_device_register(struct iio_dev *indio_dev)
>  		indio_dev->setup_ops = &noop_ring_setup_ops;
>  
>  	cdev_init(&indio_dev->chrdev, &iio_buffer_fileops);
> -	indio_dev->chrdev.owner = indio_dev->info->driver_module;
> +
> +	indio_dev->chrdev.owner = this_mod;
>  
>  	ret = cdev_device_add(&indio_dev->chrdev, &indio_dev->dev);
>  	if (ret < 0)
> @@ -1736,7 +1734,7 @@ int iio_device_register(struct iio_dev *indio_dev)
>  	iio_device_unregister_debugfs(indio_dev);
>  	return ret;
>  }
> -EXPORT_SYMBOL(iio_device_register);
> +EXPORT_SYMBOL(__iio_device_register);
>  
>  /**
>   * iio_device_unregister() - unregister a device from the IIO subsystem
> @@ -1768,23 +1766,8 @@ static void devm_iio_device_unreg(struct device *dev, void *res)
>  	iio_device_unregister(*(struct iio_dev **)res);
>  }
>  
> -/**
> - * devm_iio_device_register - Resource-managed iio_device_register()
> - * @dev:	Device to allocate iio_dev for
> - * @indio_dev:	Device structure filled by the device driver
> - *
> - * Managed iio_device_register.  The IIO device registered with this
> - * function is automatically unregistered on driver detach. This function
> - * calls iio_device_register() internally. Refer to that function for more
> - * information.
> - *
> - * If an iio_dev registered with this function needs to be unregistered
> - * separately, devm_iio_device_unregister() must be used.
> - *
> - * RETURNS:
> - * 0 on success, negative error number on failure.
> - */
> -int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev)
> +int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
> +			       struct module *this_mod)
>  {
>  	struct iio_dev **ptr;
>  	int ret;
> @@ -1794,7 +1777,7 @@ int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev)
>  		return -ENOMEM;
>  
>  	*ptr = indio_dev;
> -	ret = iio_device_register(indio_dev);
> +	ret = __iio_device_register(indio_dev, this_mod);
>  	if (!ret)
>  		devres_add(dev, ptr);
>  	else
> @@ -1802,7 +1785,7 @@ int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev)
>  
>  	return ret;
>  }
> -EXPORT_SYMBOL_GPL(devm_iio_device_register);
> +EXPORT_SYMBOL_GPL(__devm_iio_device_register);
>  
>  /**
>   * devm_iio_device_unregister - Resource-managed iio_device_unregister()
> diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
> index 978e1592c2a3..067e58863592 100644
> --- a/drivers/iio/industrialio-trigger.c
> +++ b/drivers/iio/industrialio-trigger.c
> @@ -250,7 +250,7 @@ static int iio_trigger_attach_poll_func(struct iio_trigger *trig,
>  		= bitmap_empty(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
>  
>  	/* Prevent the module from being removed whilst attached to a trigger */
> -	__module_get(pf->indio_dev->info->driver_module);
> +	__module_get(pf->indio_dev->driver_module);
>  
>  	/* Get irq number */
>  	pf->irq = iio_trigger_get_irq(trig);
> @@ -286,7 +286,7 @@ static int iio_trigger_attach_poll_func(struct iio_trigger *trig,
>  out_put_irq:
>  	iio_trigger_put_irq(trig, pf->irq);
>  out_put_module:
> -	module_put(pf->indio_dev->info->driver_module);
> +	module_put(pf->indio_dev->driver_module);
>  	return ret;
>  }
>  
> @@ -307,7 +307,7 @@ static int iio_trigger_detach_poll_func(struct iio_trigger *trig,
>  		trig->attached_own_device = false;
>  	iio_trigger_put_irq(trig, pf->irq);
>  	free_irq(pf->irq, pf);
> -	module_put(pf->indio_dev->info->driver_module);
> +	module_put(pf->indio_dev->driver_module);
>  
>  	return ret;
>  }
> diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
> index 3f5ea2e9a39e..f65391067089 100644
> --- a/include/linux/iio/iio.h
> +++ b/include/linux/iio/iio.h
> @@ -512,6 +512,7 @@ struct iio_buffer_setup_ops {
>  /**
>   * struct iio_dev - industrial I/O device
>   * @id:			[INTERN] used to identify device internally
> + * @driver_module:	[INTERN] used to make it harder to undercut users
>   * @modes:		[DRIVER] operating modes supported by device
>   * @currentmode:	[DRIVER] current operating mode
>   * @dev:		[DRIVER] device structure, should be assigned a parent
> @@ -552,6 +553,7 @@ struct iio_buffer_setup_ops {
>   */
>  struct iio_dev {
>  	int				id;
> +	struct module			*driver_module;
>  
>  	int				modes;
>  	int				currentmode;
> @@ -598,9 +600,34 @@ struct iio_dev {
>  
>  const struct iio_chan_spec
>  *iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
> -int iio_device_register(struct iio_dev *indio_dev);
> +/**
> + * iio_device_register() - register a device with the IIO subsystem
> + * @indio_dev:		Device structure filled by the device driver
> + **/
> +#define iio_device_register(iio_dev) \
> +	__iio_device_register(iio_dev, THIS_MODULE)
> +int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod);
>  void iio_device_unregister(struct iio_dev *indio_dev);
> -int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev);
> +/**
> + * devm_iio_device_register - Resource-managed iio_device_register()
> + * @dev:	Device to allocate iio_dev for
> + * @indio_dev:	Device structure filled by the device driver
> + *
> + * Managed iio_device_register.  The IIO device registered with this
> + * function is automatically unregistered on driver detach. This function
> + * calls iio_device_register() internally. Refer to that function for more
> + * information.
> + *
> + * If an iio_dev registered with this function needs to be unregistered
> + * separately, devm_iio_device_unregister() must be used.
> + *
> + * RETURNS:
> + * 0 on success, negative error number on failure.
> + */
> +#define devm_iio_device_register(dev, indio_dev) \
> +	__devm_iio_device_register(dev, indio_dev, THIS_MODULE);
> +int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
> +			       struct module *this_mod);
>  void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev);
>  int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
>  int iio_device_claim_direct_mode(struct iio_dev *indio_dev);


  reply	other threads:[~2017-06-03  8:37 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-29 15:51 [PATCH 00/38] IIO: Drop manual assignment of THIS_MODULE Jonathan Cameron
2017-05-29 15:51 ` [PATCH 01/38] iio: Use macro magic to avoid manual assign of driver_module Jonathan Cameron
2017-06-03  8:37   ` Jonathan Cameron [this message]
2017-06-12 16:13   ` Lars-Peter Clausen
2017-05-29 15:51 ` [PATCH 02/38] iio: triggers: Use macros to avoid boilerplate assignment of owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 03/38] coccinelle: Add an iio_no_owner semantic patch to drop driver_owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 04/38] iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 05/38] iio:accel: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 06/38] iio:amplifiers:ad8366 " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 07/38] iio:chemical: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 08/38] iio:common: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 09/38] iio:counter:104-quad-8 drop assign iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 10/38] iio:dac: drop assignment of iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 11/38] iio:dummy: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 12/38] iio:frequency: drop assign iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 13/38] iio:gyro: drop assign iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 14/38] iio:health: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 15/38] iio:humidity: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 16/38] iio:imu: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 17/38] iio:light: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 18/38] iio:magnetometer: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 19/38] iio:orientation: drop assign iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 20/38] iio:dpot: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 21/38] iio:potentiostat:lmp91000 drop assign iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 22/38] iio:pressure: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 23/38] iio:proximity: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 24/38] iio:temperature: drop assignment of iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 25/38] iio:triggers: drop assign iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 26/38] staging:iio:accel: drop assignment of iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 27/38] staging:iio:adc: drop assign iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 28/38] staging:iio:cdc: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 29/38] staging:iio:frequency: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 30/38] staging:iio:gyro:adis16060 " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 31/38] staging:iio:ad5933: " Jonathan Cameron
2017-05-29 15:51 ` [PATCH 32/38] staging:iio:meter: drop assign iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 33/38] iio:resolver: drop assignment of iio_info.driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 34/38] iio:adc: drop assignment of iio_trigger_ops.owner Jonathan Cameron
2017-05-29 15:51 ` [PATCH 35/38] staging:iio:light:tsl2x7x drop assignment of driver_module Jonathan Cameron
2017-05-29 15:51 ` [PATCH 36/38] input: tsc2007 - drop the driver_module assignment in iio interface Jonathan Cameron
     [not found]   ` <20170529155154.22580-37-jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-05-30  2:41     ` Dmitry Torokhov
2017-05-30  2:41       ` Dmitry Torokhov
2017-05-29 15:51 ` [PATCH 37/38] platform/x86: toshiba_acpi: drop assignment of iio_info.driver_module Jonathan Cameron
2017-05-29 17:56   ` Andy Shevchenko
2017-06-07 14:53   ` Azael Avalos
2017-06-11 14:03     ` Jonathan Cameron
2017-05-29 15:51 ` [PATCH 38/38] iio: drop iio_info.driver_module and iio_trigger_ops.owner Jonathan Cameron
2017-06-12 16:16   ` Lars-Peter Clausen
2017-06-24 20:57     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170603093736.2d9e0d03@kernel.org \
    --to=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.