Re: [PATCH 5/7] iio: core: simplify some devm functions

Yicong Yang
2021-04-09T07:22:04Z

On 2021/4/8 21:09, Alexandru Ardelean wrote:
> On Thu, Apr 8, 2021 at 2:41 PM Yicong Yang <yangyicong@hisilicon.com> wrote:
>>
>> Use devm_add_action_or_reset() instead of devres_alloc() and
>> devres_add(), which works the same. This will simplify the
>> code. There is no functional changes.
>>
>> Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
>> ---
>> drivers/iio/industrialio-core.c | 43 +++++++++++++++--------------------------
>> 1 file changed, 16 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
>> index 7db761a..2dfbed3 100644
>> --- a/drivers/iio/industrialio-core.c
>> +++ b/drivers/iio/industrialio-core.c
>> @@ -1627,9 +1627,9 @@ void iio_device_free(struct iio_dev *dev)
>> }
>> EXPORT_SYMBOL(iio_device_free);
>>
>> -static void devm_iio_device_release(struct device *dev, void *res)
>> +static void devm_iio_device_release(void *iio_dev)
>> {
>> - iio_device_free(*(struct iio_dev **)res);
>> + iio_device_free(iio_dev);
>> }
>>
>> /**
>> @@ -1645,20 +1645,17 @@ static void devm_iio_device_release(struct device *dev, void *res)
>> */
>> struct iio_dev *devm_iio_device_alloc(struct device *parent, int sizeof_priv)
>> {
>> - struct iio_dev **ptr, *iio_dev;
>> -
>> - ptr = devres_alloc(devm_iio_device_release, sizeof(*ptr),
>> - GFP_KERNEL);
>> - if (!ptr)
>> - return NULL;
>> + struct iio_dev *iio_dev;
>> + int ret;
>>
>> iio_dev = iio_device_alloc(parent, sizeof_priv);
>> - if (iio_dev) {
>> - *ptr = iio_dev;
>> - devres_add(parent, ptr);
>> - } else {
>> - devres_free(ptr);
>> - }
>> + if (!iio_dev)
>> + return iio_dev;
>
> This is correct.
> But the preference is usually:
> if (!iio_dev)
> return NULL;
>

since it returned iio_dev when failure before, so i just keep as is

>> +
>> + ret = devm_add_action_or_reset(parent, devm_iio_device_release,
>> + iio_dev);
>> + if (ret)
>> + return ERR_PTR(ret);
>>
>> return iio_dev;
>> }
>> @@ -1889,29 +1886,21 @@ void iio_device_unregister(struct iio_dev *indio_dev)
>> }
>> EXPORT_SYMBOL(iio_device_unregister);
>>
>> -static void devm_iio_device_unreg(struct device *dev, void *res)
>> +static void devm_iio_device_unreg(void *indio_dev)
>> {
>> - iio_device_unregister(*(struct iio_dev **)res);
>> + iio_device_unregister(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;
>>
>> - ptr = devres_alloc(devm_iio_device_unreg, sizeof(*ptr), GFP_KERNEL);
>> - if (!ptr)
>> - return -ENOMEM;
>> -
>> - *ptr = indio_dev;
>> ret = __iio_device_register(indio_dev, this_mod);
>> - if (!ret)
>> - devres_add(dev, ptr);
>> - else
>> - devres_free(ptr);
>> + if (ret)
>> + return ret;
>>
>> - return ret;
>> + return devm_add_action_or_reset(dev, devm_iio_device_unreg, indio_dev);
>> }
>> EXPORT_SYMBOL_GPL(__devm_iio_device_register);
>>
>> --
>> 2.8.1
>>
>
> .
>