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);
next prev parent reply other threads:[~2017-06-03 8:37 UTC|newest]
Thread overview: 47+ 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
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).