Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1363518 > unrolled thread

[RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling

Started byJavier Martinez Canillas <javier@osg.samsung.com>
First post2016-03-23 17:20 +0100
Last post2016-03-24 01:40 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling Javier Martinez Canillas <javier@osg.samsung.com> - 2016-03-23 17:20 +0100
    Re: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config()  nodes handling Andreas Färber <afaerber@suse.de> - 2016-03-23 23:40 +0100
      Re: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config()  nodes handling Javier Martinez Canillas <javier@osg.samsung.com> - 2016-03-24 01:40 +0100

#1363518 — [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2016-03-23 17:20 +0100
Subject[RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling
Message-ID<rfTFM-60M-11@gated-at.bofh.it>
The same struct device_node * is used for looking up the I2C sensor, OF
graph endpoint and port. So the reference count is incremented but not
decremented for the endpoint and port nodes.

Fix this by having separate pointers for each node looked up.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>

---
Hello,

This patch was only build tested because I don't have an Exynos4
board to test. So testing on real HW will be highly appreciated.

Best regards,
Javier

 drivers/media/platform/exynos4-is/fimc-is.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
index 979c388ebf60..0b04a5d25187 100644
--- a/drivers/media/platform/exynos4-is/fimc-is.c
+++ b/drivers/media/platform/exynos4-is/fimc-is.c
@@ -165,6 +165,7 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
 						struct device_node *node)
 {
 	struct fimc_is_sensor *sensor = &is->sensor[index];
+	struct device_node *ep, *port;
 	u32 tmp = 0;
 	int ret;
 
@@ -175,16 +176,18 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
 		return -EINVAL;
 	}
 
-	node = of_graph_get_next_endpoint(node, NULL);
-	if (!node)
+	ep = of_graph_get_next_endpoint(node, NULL);
+	if (!ep)
 		return -ENXIO;
 
-	node = of_graph_get_remote_port(node);
-	if (!node)
+	port = of_graph_get_remote_port(ep);
+	of_node_put(ep);
+	if (!port)
 		return -ENXIO;
 
 	/* Use MIPI-CSIS channel id to determine the ISP I2C bus index. */
-	ret = of_property_read_u32(node, "reg", &tmp);
+	ret = of_property_read_u32(port, "reg", &tmp);
+	of_node_put(port);
 	if (ret < 0) {
 		dev_err(&is->pdev->dev, "reg property not found at: %s\n",
 							 node->full_name);
-- 
2.5.0

[toc] | [next] | [standalone]


#1363764 — Re: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling

FromAndreas Färber <afaerber@suse.de>
Date2016-03-23 23:40 +0100
SubjectRe: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling
Message-ID<rfZBv-1Fl-3@gated-at.bofh.it>
In reply to#1363518
Hi Javier,

Am 23.03.2016 um 17:15 schrieb Javier Martinez Canillas:
> The same struct device_node * is used for looking up the I2C sensor, OF
> graph endpoint and port. So the reference count is incremented but not
> decremented for the endpoint and port nodes.
> 
> Fix this by having separate pointers for each node looked up.
> 
> Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
[...]
> diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
> index 979c388ebf60..0b04a5d25187 100644
> --- a/drivers/media/platform/exynos4-is/fimc-is.c
> +++ b/drivers/media/platform/exynos4-is/fimc-is.c
> @@ -165,6 +165,7 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
>  						struct device_node *node)
>  {
>  	struct fimc_is_sensor *sensor = &is->sensor[index];
> +	struct device_node *ep, *port;
>  	u32 tmp = 0;
>  	int ret;
>  
> @@ -175,16 +176,18 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
>  		return -EINVAL;
>  	}
>  
> -	node = of_graph_get_next_endpoint(node, NULL);
> -	if (!node)
> +	ep = of_graph_get_next_endpoint(node, NULL);
> +	if (!ep)
>  		return -ENXIO;
>  
> -	node = of_graph_get_remote_port(node);
> -	if (!node)
> +	port = of_graph_get_remote_port(ep);
> +	of_node_put(ep);
> +	if (!port)
>  		return -ENXIO;
>  
>  	/* Use MIPI-CSIS channel id to determine the ISP I2C bus index. */
> -	ret = of_property_read_u32(node, "reg", &tmp);
> +	ret = of_property_read_u32(port, "reg", &tmp);
> +	of_node_put(port);
>  	if (ret < 0) {
>  		dev_err(&is->pdev->dev, "reg property not found at: %s\n",
>  							 node->full_name);

port->full_name. You'll need to defer the of_node_put(port) then.

Regards,
Andreas

-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)

[toc] | [prev] | [next] | [standalone]


#1363799 — Re: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2016-03-24 01:40 +0100
SubjectRe: [RFT PATCH] [media] exynos4-is: Fix fimc_is_parse_sensor_config() nodes handling
Message-ID<rg1tE-2X9-3@gated-at.bofh.it>
In reply to#1363764
Hello Andreas,

Thanks for your feedback.

On 03/23/2016 07:33 PM, Andreas Färber wrote:
> Hi Javier,
> 
> Am 23.03.2016 um 17:15 schrieb Javier Martinez Canillas:
>> The same struct device_node * is used for looking up the I2C sensor, OF
>> graph endpoint and port. So the reference count is incremented but not
>> decremented for the endpoint and port nodes.
>>
>> Fix this by having separate pointers for each node looked up.
>>
>> Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
> [...]
>> diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
>> index 979c388ebf60..0b04a5d25187 100644
>> --- a/drivers/media/platform/exynos4-is/fimc-is.c
>> +++ b/drivers/media/platform/exynos4-is/fimc-is.c
>> @@ -165,6 +165,7 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
>>  						struct device_node *node)
>>  {
>>  	struct fimc_is_sensor *sensor = &is->sensor[index];
>> +	struct device_node *ep, *port;
>>  	u32 tmp = 0;
>>  	int ret;
>>  
>> @@ -175,16 +176,18 @@ static int fimc_is_parse_sensor_config(struct fimc_is *is, unsigned int index,
>>  		return -EINVAL;
>>  	}
>>  
>> -	node = of_graph_get_next_endpoint(node, NULL);
>> -	if (!node)
>> +	ep = of_graph_get_next_endpoint(node, NULL);
>> +	if (!ep)
>>  		return -ENXIO;
>>  
>> -	node = of_graph_get_remote_port(node);
>> -	if (!node)
>> +	port = of_graph_get_remote_port(ep);
>> +	of_node_put(ep);
>> +	if (!port)
>>  		return -ENXIO;
>>  
>>  	/* Use MIPI-CSIS channel id to determine the ISP I2C bus index. */
>> -	ret = of_property_read_u32(node, "reg", &tmp);
>> +	ret = of_property_read_u32(port, "reg", &tmp);
>> +	of_node_put(port);
>>  	if (ret < 0) {
>>  		dev_err(&is->pdev->dev, "reg property not found at: %s\n",
>>  							 node->full_name);
> 
> port->full_name. You'll need to defer the of_node_put(port) then.
>

Right, sorry for missing that and thanks a lot for pointing it out.
 
> Regards,
> Andreas
> 

Best regards,
-- 
Javier Martinez Canillas
Open Source Group
Samsung Research America

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web