diff mbox series

[1/1] v4l: fwnode: Remove now-redundant loop from v4l2_fwnode_parse_reference()

Message ID 20220223094720.19196-1-sakari.ailus@linux.intel.com
State Superseded
Headers show
Series [1/1] v4l: fwnode: Remove now-redundant loop from v4l2_fwnode_parse_reference() | expand

Commit Message

Sakari Ailus Feb. 23, 2022, 9:47 a.m. UTC
v4l2_fwnode_parse_reference() relied on counting the number of references
for async array memory allocation. The array is long gone so remove
counting the references now.

This also changes how the function arrives in different unsuccessful
return values but the functionality remains unchanged.

Also the check for -ENODATA is removed, it was made redundant by commit
c343bc2ce2c6 ("ACPI: properties: Align return codes of
__acpi_node_get_property_reference()").

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/v4l2-core/v4l2-fwnode.c | 28 ++++++++-------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

Comments

Laurent Pinchart Feb. 23, 2022, 10:15 a.m. UTC | #1
Hi Sakari,

Thank you for the patch.

On Wed, Feb 23, 2022 at 11:47:20AM +0200, Sakari Ailus wrote:
> v4l2_fwnode_parse_reference() relied on counting the number of references
> for async array memory allocation. The array is long gone so remove
> counting the references now.
> 
> This also changes how the function arrives in different unsuccessful
> return values but the functionality remains unchanged.
> 
> Also the check for -ENODATA is removed, it was made redundant by commit
> c343bc2ce2c6 ("ACPI: properties: Align return codes of
> __acpi_node_get_property_reference()").

I would have done this first in a separate patch.

> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  drivers/media/v4l2-core/v4l2-fwnode.c | 28 ++++++++-------------------
>  1 file changed, 8 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
> index 71dcc9a96535..fe2dfc8f9d56 100644
> --- a/drivers/media/v4l2-core/v4l2-fwnode.c
> +++ b/drivers/media/v4l2-core/v4l2-fwnode.c
> @@ -894,25 +894,8 @@ static int v4l2_fwnode_reference_parse(struct device *dev,
>  	int ret;
>  
>  	for (index = 0;
> -	     !(ret = fwnode_property_get_reference_args(dev_fwnode(dev),
> -							prop, NULL, 0,
> -							index, &args));
> -	     index++)
> -		fwnode_handle_put(args.fwnode);
> -
> -	if (!index)
> -		return -ENOENT;
> -
> -	/*
> -	 * Note that right now both -ENODATA and -ENOENT may signal
> -	 * out-of-bounds access. Return the error in cases other than that.
> -	 */
> -	if (ret != -ENOENT && ret != -ENODATA)
> -		return ret;
> -
> -	for (index = 0;
> -	     !fwnode_property_get_reference_args(dev_fwnode(dev), prop, NULL,
> -						 0, index, &args);
> +	     !(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop,
> +							NULL, 0, index, &args));
>  	     index++) {
>  		struct v4l2_async_subdev *asd;
>  
> @@ -928,7 +911,12 @@ static int v4l2_fwnode_reference_parse(struct device *dev,
>  		}
>  	}
>  
> -	return 0;
> +	/* -ENOENT here means successful parsing */
> +	if (ret != -ENOENT)
> +		return ret;
> +
> +	/* Return -ENOENT if no references were found */
> +	return index ?: -ENOENT;

The function now returns index on success, while it used to return 0. Is
it intentional ?

>  }
>  
>  /*
diff mbox series

Patch

diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
index 71dcc9a96535..fe2dfc8f9d56 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -894,25 +894,8 @@  static int v4l2_fwnode_reference_parse(struct device *dev,
 	int ret;
 
 	for (index = 0;
-	     !(ret = fwnode_property_get_reference_args(dev_fwnode(dev),
-							prop, NULL, 0,
-							index, &args));
-	     index++)
-		fwnode_handle_put(args.fwnode);
-
-	if (!index)
-		return -ENOENT;
-
-	/*
-	 * Note that right now both -ENODATA and -ENOENT may signal
-	 * out-of-bounds access. Return the error in cases other than that.
-	 */
-	if (ret != -ENOENT && ret != -ENODATA)
-		return ret;
-
-	for (index = 0;
-	     !fwnode_property_get_reference_args(dev_fwnode(dev), prop, NULL,
-						 0, index, &args);
+	     !(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop,
+							NULL, 0, index, &args));
 	     index++) {
 		struct v4l2_async_subdev *asd;
 
@@ -928,7 +911,12 @@  static int v4l2_fwnode_reference_parse(struct device *dev,
 		}
 	}
 
-	return 0;
+	/* -ENOENT here means successful parsing */
+	if (ret != -ENOENT)
+		return ret;
+
+	/* Return -ENOENT if no references were found */
+	return index ?: -ENOENT;
 }
 
 /*