Re: [PATCH] iio: iio_device_alloc(): Remove unnecessary self drvdata

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

 



On Sun,  5 Dec 2021 13:50:52 +0100
Lars-Peter Clausen <lars@xxxxxxxxxx> wrote:

> Drvdata is typically used by drivers to attach driver specific data to a
> device. It is used to retrieve driver specific information when only the
> device to which the data is attached is available.
> 
> In the IIO core in the `iio_device_alloc()` function we call
> `iio_device_set_drvdata(indio_dev, indio_dev)`. This sets the drvdata of
> the IIO device to itself.
> 
> This is rather unnecessary since if we have a pointer to the IIO device to
> call `iio_device_get_drvdata()` on it we don't need to call the function
> since we already have the pointer. If we only have a pointer to the `struct
> device` we can use `dev_to_iio_dev()` to get the IIO device from it.
> 
> Furthermore the drvdata is supposed to be reserved for drivers, so it
> should not be used by the IIO core in the first place.
> 
> The `set_drvdata()` has been around from the very beginning of the IIO
> framework and back then it was used in the IIO device sysfs attribute
> handling code. But that was subsequently replaced with a `dev_to_iio_dev()`
> in commit e53f5ac52ec1 ("iio: Use dev_to_iio_dev()") and other cleanups.
> 
> The self `set_drvdata()` is now no longer needed and can be removed.
> 
> Verified that there no longer any users by checking for potential users
> using the following two coccinelle scripts and reviewing that none of the
> matches are problematic code.
> 
> <smpl>
> @@
> struct iio_dev *iio_dev;
> expression dev;
> identifier fn !~ "(remove|resume|suspend)";
> @@
> fn(...)
> {
> ...
> *iio_dev = dev_get_drvdata(dev)
> ...
> }
> </smpl>
> 
> <smpl>
> @r1@
> position p;
> struct iio_dev *indio_dev;
> identifier dev_fn =~ "^dev_";
> identifier devm_fn =~ "^devm_";
> @@
> (
>  dev_fn
> |
>  devm_fn
> )
>  (&indio_dev@p->dev, ...)
> 
> @@
> struct iio_dev *indio_dev;
> position p != r1.p;
> @@
> *&indio_dev@p->dev</smpl>
> 
> Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx>

Applied to the togreg branch of iio.git and pushed out as testing for 0-day
to poke it.

Thanks,

Jonathan

> ---
>  drivers/iio/industrialio-core.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index 20d5178ca073..409c278a4c2c 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1656,7 +1656,6 @@ struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv)
>  	indio_dev->dev.type = &iio_device_type;
>  	indio_dev->dev.bus = &iio_bus_type;
>  	device_initialize(&indio_dev->dev);
> -	iio_device_set_drvdata(indio_dev, (void *)indio_dev);
>  	mutex_init(&indio_dev->mlock);
>  	mutex_init(&iio_dev_opaque->info_exist_lock);
>  	INIT_LIST_HEAD(&iio_dev_opaque->channel_attr_list);




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux