diff mbox series

iio: Use an early return in iio_device_alloc to simplify code.

Message ID 20200419151337.43293-1-jic23@kernel.org (mailing list archive)
State New, archived
Headers show
Series iio: Use an early return in iio_device_alloc to simplify code. | expand

Commit Message

Jonathan Cameron April 19, 2020, 3:13 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Noticed whilst reviewing Alexandru's patch to the same function.
If we simply flip the logic and return NULL immediately after memory
allocation failure we reduce the indent of the following block and
end up with more 'idiomatic' kernel code.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/iio/industrialio-core.c | 38 ++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 19 deletions(-)

Comments

Alexandru Ardelean April 20, 2020, 6:17 a.m. UTC | #1
On Sun, 2020-04-19 at 16:13 +0100, jic23@kernel.org wrote:
> [External]
> 
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> Noticed whilst reviewing Alexandru's patch to the same function.
> If we simply flip the logic and return NULL immediately after memory
> allocation failure we reduce the indent of the following block and
> end up with more 'idiomatic' kernel code.
> 

I also was tempted to do it, but was tempted [a bit more] by the initial change
that I goofed.

A few thoughts on this [can be ignored].
But, since doing this change, should 'dev' be renamed to 'indio_dev'?
It shouldn't be a lot more code than the current change [I hope].
When looking through IIO core, I got a minor/slight confusion on this alloc code
about the name 'dev' [which is of type 'struct iio_dev' vs 'struct device', as
is more customary].

If 'dev' was chosen to fit within any 80 col-width limit, that limit should be
less likely to hit now.

1 more inline.

Well, even with/without these changes.

Reviewed-by: Alexandru Ardelean <alexandru.ardelean@analog.com>

> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
> ---
>  drivers/iio/industrialio-core.c | 38 ++++++++++++++++-----------------
>  1 file changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index f4daf19f2a3b..96f6dacb206d 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1504,27 +1504,27 @@ struct iio_dev *iio_device_alloc(int sizeof_priv)
>  	alloc_size += IIO_ALIGN - 1;
>  
>  	dev = kzalloc(alloc_size, GFP_KERNEL);
> +	if (!dev)
> +		return NULL;
>  
> -	if (dev) {
> -		dev->dev.groups = dev->groups;
> -		dev->dev.type = &iio_device_type;
> -		dev->dev.bus = &iio_bus_type;
> -		device_initialize(&dev->dev);
> -		dev_set_drvdata(&dev->dev, (void *)dev);
> -		mutex_init(&dev->mlock);
> -		mutex_init(&dev->info_exist_lock);
> -		INIT_LIST_HEAD(&dev->channel_attr_list);
> -
> -		dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> -		if (dev->id < 0) {
> -			/* cannot use a dev_err as the name isn't available */
> -			pr_err("failed to get device id\n");
> -			kfree(dev);
> -			return NULL;
> -		}
> -		dev_set_name(&dev->dev, "iio:device%d", dev->id);
> -		INIT_LIST_HEAD(&dev->buffer_list);
> +	dev->dev.groups = dev->groups;
> +	dev->dev.type = &iio_device_type;
> +	dev->dev.bus = &iio_bus_type;
> +	device_initialize(&dev->dev);
> +	dev_set_drvdata(&dev->dev, (void *)dev);
> +	mutex_init(&dev->mlock);
> +	mutex_init(&dev->info_exist_lock);
> +	INIT_LIST_HEAD(&dev->channel_attr_list);
> +
> +	dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> +	if (dev->id < 0) {
> +		/* cannot use a dev_err as the name isn't available */
> +		pr_err("failed to get device id\n");
> +		kfree(dev);
> +		return NULL;

would it be too much for this patch to move this right after the kzalloc()?
no strong opinion from my side to do it or not;
but it does save some init cycles, and compresses this init block a bit;

>  	}
> +	dev_set_name(&dev->dev, "iio:device%d", dev->id);
> +	INIT_LIST_HEAD(&dev->buffer_list);
>  
>  	return dev;
>  }
Jonathan Cameron April 25, 2020, 3:47 p.m. UTC | #2
On Mon, 20 Apr 2020 06:17:32 +0000
"Ardelean, Alexandru" <alexandru.Ardelean@analog.com> wrote:

> On Sun, 2020-04-19 at 16:13 +0100, jic23@kernel.org wrote:
> > [External]
> > 
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > 
> > Noticed whilst reviewing Alexandru's patch to the same function.
> > If we simply flip the logic and return NULL immediately after memory
> > allocation failure we reduce the indent of the following block and
> > end up with more 'idiomatic' kernel code.
> >   
> 
> I also was tempted to do it, but was tempted [a bit more] by the initial change
> that I goofed.
> 
> A few thoughts on this [can be ignored].
> But, since doing this change, should 'dev' be renamed to 'indio_dev'?
> It shouldn't be a lot more code than the current change [I hope].
> When looking through IIO core, I got a minor/slight confusion on this alloc code
> about the name 'dev' [which is of type 'struct iio_dev' vs 'struct device', as
> is more customary].
> 
> If 'dev' was chosen to fit within any 80 col-width limit, that limit should be
> less likely to hit now.

A different type of cleanup, so I think worth a separate patch
(even though it's messing with the same block of code.)

Got to keep to the rules I pester everyone else into following :)

So I'll apply this as is and might get the dev->indio_dev one out
after I've caught up with rest of email queue. 

Thanks,

Jonathan

> 
> 1 more inline.
> 
> Well, even with/without these changes.
> 
> Reviewed-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
> 
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
> > ---
> >  drivers/iio/industrialio-core.c | 38 ++++++++++++++++-----------------
> >  1 file changed, 19 insertions(+), 19 deletions(-)
> > 
> > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> > index f4daf19f2a3b..96f6dacb206d 100644
> > --- a/drivers/iio/industrialio-core.c
> > +++ b/drivers/iio/industrialio-core.c
> > @@ -1504,27 +1504,27 @@ struct iio_dev *iio_device_alloc(int sizeof_priv)
> >  	alloc_size += IIO_ALIGN - 1;
> >  
> >  	dev = kzalloc(alloc_size, GFP_KERNEL);
> > +	if (!dev)
> > +		return NULL;
> >  
> > -	if (dev) {
> > -		dev->dev.groups = dev->groups;
> > -		dev->dev.type = &iio_device_type;
> > -		dev->dev.bus = &iio_bus_type;
> > -		device_initialize(&dev->dev);
> > -		dev_set_drvdata(&dev->dev, (void *)dev);
> > -		mutex_init(&dev->mlock);
> > -		mutex_init(&dev->info_exist_lock);
> > -		INIT_LIST_HEAD(&dev->channel_attr_list);
> > -
> > -		dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> > -		if (dev->id < 0) {
> > -			/* cannot use a dev_err as the name isn't available */
> > -			pr_err("failed to get device id\n");
> > -			kfree(dev);
> > -			return NULL;
> > -		}
> > -		dev_set_name(&dev->dev, "iio:device%d", dev->id);
> > -		INIT_LIST_HEAD(&dev->buffer_list);
> > +	dev->dev.groups = dev->groups;
> > +	dev->dev.type = &iio_device_type;
> > +	dev->dev.bus = &iio_bus_type;
> > +	device_initialize(&dev->dev);
> > +	dev_set_drvdata(&dev->dev, (void *)dev);
> > +	mutex_init(&dev->mlock);
> > +	mutex_init(&dev->info_exist_lock);
> > +	INIT_LIST_HEAD(&dev->channel_attr_list);
> > +
> > +	dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> > +	if (dev->id < 0) {
> > +		/* cannot use a dev_err as the name isn't available */
> > +		pr_err("failed to get device id\n");
> > +		kfree(dev);
> > +		return NULL;  
> 
> would it be too much for this patch to move this right after the kzalloc()?
> no strong opinion from my side to do it or not;
> but it does save some init cycles, and compresses this init block a bit;

It doesn't really save any cycles because the chance of failure of ID allocation
is negligible...  Now I'd agree with you if writing from scratch, but as a
tidy up patch, it's good to keep things really simple.


> 
> >  	}
> > +	dev_set_name(&dev->dev, "iio:device%d", dev->id);
> > +	INIT_LIST_HEAD(&dev->buffer_list);
> >  
> >  	return dev;
> >  }
Alexandru Ardelean April 26, 2020, 7:25 a.m. UTC | #3
On Sat, 2020-04-25 at 16:47 +0100, Jonathan Cameron wrote:
> On Mon, 20 Apr 2020 06:17:32 +0000
> "Ardelean, Alexandru" <alexandru.Ardelean@analog.com> wrote:
> 
> > On Sun, 2020-04-19 at 16:13 +0100, jic23@kernel.org wrote:
> > > [External]
> > > 
> > > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > > 
> > > Noticed whilst reviewing Alexandru's patch to the same function.
> > > If we simply flip the logic and return NULL immediately after memory
> > > allocation failure we reduce the indent of the following block and
> > > end up with more 'idiomatic' kernel code.
> > >   
> > 
> > I also was tempted to do it, but was tempted [a bit more] by the initial
> > change
> > that I goofed.
> > 
> > A few thoughts on this [can be ignored].
> > But, since doing this change, should 'dev' be renamed to 'indio_dev'?
> > It shouldn't be a lot more code than the current change [I hope].
> > When looking through IIO core, I got a minor/slight confusion on this alloc
> > code
> > about the name 'dev' [which is of type 'struct iio_dev' vs 'struct device',
> > as
> > is more customary].
> > 
> > If 'dev' was chosen to fit within any 80 col-width limit, that limit should
> > be
> > less likely to hit now.
> 
> A different type of cleanup, so I think worth a separate patch
> (even though it's messing with the same block of code.)
> 
> Got to keep to the rules I pester everyone else into following :)

Fair enough.
I was assuming there would be a preference to keep the patch semantic as simple
as possible.

I thought I'd point them out, since I also looked over this bit a while back.

> 
> So I'll apply this as is and might get the dev->indio_dev one out
> after I've caught up with rest of email queue. 
> 
> Thanks,
> 
> Jonathan
> 
> > 1 more inline.
> > 
> > Well, even with/without these changes.
> > 
> > Reviewed-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
> > 
> > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > > Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
> > > ---
> > >  drivers/iio/industrialio-core.c | 38 ++++++++++++++++-----------------
> > >  1 file changed, 19 insertions(+), 19 deletions(-)
> > > 
> > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-
> > > core.c
> > > index f4daf19f2a3b..96f6dacb206d 100644
> > > --- a/drivers/iio/industrialio-core.c
> > > +++ b/drivers/iio/industrialio-core.c
> > > @@ -1504,27 +1504,27 @@ struct iio_dev *iio_device_alloc(int sizeof_priv)
> > >  	alloc_size += IIO_ALIGN - 1;
> > >  
> > >  	dev = kzalloc(alloc_size, GFP_KERNEL);
> > > +	if (!dev)
> > > +		return NULL;
> > >  
> > > -	if (dev) {
> > > -		dev->dev.groups = dev->groups;
> > > -		dev->dev.type = &iio_device_type;
> > > -		dev->dev.bus = &iio_bus_type;
> > > -		device_initialize(&dev->dev);
> > > -		dev_set_drvdata(&dev->dev, (void *)dev);
> > > -		mutex_init(&dev->mlock);
> > > -		mutex_init(&dev->info_exist_lock);
> > > -		INIT_LIST_HEAD(&dev->channel_attr_list);
> > > -
> > > -		dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> > > -		if (dev->id < 0) {
> > > -			/* cannot use a dev_err as the name isn't available */
> > > -			pr_err("failed to get device id\n");
> > > -			kfree(dev);
> > > -			return NULL;
> > > -		}
> > > -		dev_set_name(&dev->dev, "iio:device%d", dev->id);
> > > -		INIT_LIST_HEAD(&dev->buffer_list);
> > > +	dev->dev.groups = dev->groups;
> > > +	dev->dev.type = &iio_device_type;
> > > +	dev->dev.bus = &iio_bus_type;
> > > +	device_initialize(&dev->dev);
> > > +	dev_set_drvdata(&dev->dev, (void *)dev);
> > > +	mutex_init(&dev->mlock);
> > > +	mutex_init(&dev->info_exist_lock);
> > > +	INIT_LIST_HEAD(&dev->channel_attr_list);
> > > +
> > > +	dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
> > > +	if (dev->id < 0) {
> > > +		/* cannot use a dev_err as the name isn't available */
> > > +		pr_err("failed to get device id\n");
> > > +		kfree(dev);
> > > +		return NULL;  
> > 
> > would it be too much for this patch to move this right after the kzalloc()?
> > no strong opinion from my side to do it or not;
> > but it does save some init cycles, and compresses this init block a bit;
> 
> It doesn't really save any cycles because the chance of failure of ID
> allocation
> is negligible...  Now I'd agree with you if writing from scratch, but as a
> tidy up patch, it's good to keep things really simple.
> 
> 
> > >  	}
> > > +	dev_set_name(&dev->dev, "iio:device%d", dev->id);
> > > +	INIT_LIST_HEAD(&dev->buffer_list);
> > >  
> > >  	return dev;
> > >  }
diff mbox series

Patch

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index f4daf19f2a3b..96f6dacb206d 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1504,27 +1504,27 @@  struct iio_dev *iio_device_alloc(int sizeof_priv)
 	alloc_size += IIO_ALIGN - 1;
 
 	dev = kzalloc(alloc_size, GFP_KERNEL);
+	if (!dev)
+		return NULL;
 
-	if (dev) {
-		dev->dev.groups = dev->groups;
-		dev->dev.type = &iio_device_type;
-		dev->dev.bus = &iio_bus_type;
-		device_initialize(&dev->dev);
-		dev_set_drvdata(&dev->dev, (void *)dev);
-		mutex_init(&dev->mlock);
-		mutex_init(&dev->info_exist_lock);
-		INIT_LIST_HEAD(&dev->channel_attr_list);
-
-		dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
-		if (dev->id < 0) {
-			/* cannot use a dev_err as the name isn't available */
-			pr_err("failed to get device id\n");
-			kfree(dev);
-			return NULL;
-		}
-		dev_set_name(&dev->dev, "iio:device%d", dev->id);
-		INIT_LIST_HEAD(&dev->buffer_list);
+	dev->dev.groups = dev->groups;
+	dev->dev.type = &iio_device_type;
+	dev->dev.bus = &iio_bus_type;
+	device_initialize(&dev->dev);
+	dev_set_drvdata(&dev->dev, (void *)dev);
+	mutex_init(&dev->mlock);
+	mutex_init(&dev->info_exist_lock);
+	INIT_LIST_HEAD(&dev->channel_attr_list);
+
+	dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
+	if (dev->id < 0) {
+		/* cannot use a dev_err as the name isn't available */
+		pr_err("failed to get device id\n");
+		kfree(dev);
+		return NULL;
 	}
+	dev_set_name(&dev->dev, "iio:device%d", dev->id);
+	INIT_LIST_HEAD(&dev->buffer_list);
 
 	return dev;
 }