All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-06 10:21 ` Loys Ollivier
  0 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-06 10:21 UTC (permalink / raw)
  To: Andy Gross, David Brown
  Cc: Loys Ollivier, linux-arm-msm, linux-soc, linux-kernel,
	linux-arm-kernel, Jerome Brunet

When using other platform architectures, in the init of the qcom_scm
driver, of_node_put is called on /firmware if no qcom dt is found.
This results in a kernel error: Bad of_node_put() on /firmware.

The call to of_node_put from the qcom_scm init is unnecessary as
of_find_matching_node is calling it automatically.

Remove this of_node_put().

Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
---
Change since v1, remove the curly brackets as if statement becomes a
one liner.

 drivers/firmware/qcom_scm.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index af4c75217ea6..5beb6a6adcf6 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -632,10 +632,8 @@ static int __init qcom_scm_init(void)
 
 	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
 
-	if (!np) {
-		of_node_put(fw_np);
+	if (!np)
 		return -ENODEV;
-	}
 
 	of_node_put(np);
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-06 10:21 ` Loys Ollivier
  0 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-06 10:21 UTC (permalink / raw)
  To: linux-arm-kernel

When using other platform architectures, in the init of the qcom_scm
driver, of_node_put is called on /firmware if no qcom dt is found.
This results in a kernel error: Bad of_node_put() on /firmware.

The call to of_node_put from the qcom_scm init is unnecessary as
of_find_matching_node is calling it automatically.

Remove this of_node_put().

Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
---
Change since v1, remove the curly brackets as if statement becomes a
one liner.

 drivers/firmware/qcom_scm.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index af4c75217ea6..5beb6a6adcf6 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -632,10 +632,8 @@ static int __init qcom_scm_init(void)
 
 	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
 
-	if (!np) {
-		of_node_put(fw_np);
+	if (!np)
 		return -ENODEV;
-	}
 
 	of_node_put(np);
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
  2017-12-06 10:21 ` Loys Ollivier
@ 2017-12-06 20:06   ` Stephen Boyd
  -1 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2017-12-06 20:06 UTC (permalink / raw)
  To: Loys Ollivier
  Cc: Andy Gross, David Brown, linux-arm-msm, linux-soc, linux-kernel,
	linux-arm-kernel, Jerome Brunet

On 12/06, Loys Ollivier wrote:
> When using other platform architectures, in the init of the qcom_scm
> driver, of_node_put is called on /firmware if no qcom dt is found.
> This results in a kernel error: Bad of_node_put() on /firmware.
> 
> The call to of_node_put from the qcom_scm init is unnecessary as
> of_find_matching_node is calling it automatically.
> 
> Remove this of_node_put().
> 
> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
> ---

This still looks wrong. Especially if of_find_matching_node() is
going to look for siblings of the /firmware node for the
compatible string for scm device. Why do we check at all? Can't
we just delete this and let of_platform_populate() take care of
it? BTW, OP-TEE driver seems to have a similar problem.

---8<----

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index af4c75217ea6..440d8f796faa 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
 	int ret;
 
 	fw_np = of_find_node_by_name(NULL, "firmware");
-
 	if (!fw_np)
-		return -ENODEV;
-
-	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
-
-	if (!np) {
-		of_node_put(fw_np);
-		return -ENODEV;
-	}
-
-	of_node_put(np);
+		return 0;
 
 	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
-
 	of_node_put(fw_np);
-
 	if (ret)
 		return ret;
 

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-06 20:06   ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2017-12-06 20:06 UTC (permalink / raw)
  To: linux-arm-kernel

On 12/06, Loys Ollivier wrote:
> When using other platform architectures, in the init of the qcom_scm
> driver, of_node_put is called on /firmware if no qcom dt is found.
> This results in a kernel error: Bad of_node_put() on /firmware.
> 
> The call to of_node_put from the qcom_scm init is unnecessary as
> of_find_matching_node is calling it automatically.
> 
> Remove this of_node_put().
> 
> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
> ---

This still looks wrong. Especially if of_find_matching_node() is
going to look for siblings of the /firmware node for the
compatible string for scm device. Why do we check at all? Can't
we just delete this and let of_platform_populate() take care of
it? BTW, OP-TEE driver seems to have a similar problem.

---8<----

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index af4c75217ea6..440d8f796faa 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
 	int ret;
 
 	fw_np = of_find_node_by_name(NULL, "firmware");
-
 	if (!fw_np)
-		return -ENODEV;
-
-	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
-
-	if (!np) {
-		of_node_put(fw_np);
-		return -ENODEV;
-	}
-
-	of_node_put(np);
+		return 0;
 
 	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
-
 	of_node_put(fw_np);
-
 	if (ret)
 		return ret;
 

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
  2017-12-06 20:06   ` Stephen Boyd
@ 2017-12-07  8:42     ` Jerome Forissier
  -1 siblings, 0 replies; 12+ messages in thread
From: Jerome Forissier @ 2017-12-07  8:42 UTC (permalink / raw)
  To: Stephen Boyd, Loys Ollivier
  Cc: linux-arm-msm, linux-kernel, David Brown, Andy Gross, linux-soc,
	linux-arm-kernel, Jerome Brunet, Jens Wiklander



On 12/06/2017 09:06 PM, Stephen Boyd wrote:
> On 12/06, Loys Ollivier wrote:
>> When using other platform architectures, in the init of the qcom_scm
>> driver, of_node_put is called on /firmware if no qcom dt is found.
>> This results in a kernel error: Bad of_node_put() on /firmware.
>>
>> The call to of_node_put from the qcom_scm init is unnecessary as
>> of_find_matching_node is calling it automatically.
>>
>> Remove this of_node_put().
>>
>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>> ---
> 
> This still looks wrong. Especially if of_find_matching_node() is
> going to look for siblings of the /firmware node for the
> compatible string for scm device. Why do we check at all? Can't
> we just delete this and let of_platform_populate() take care of
> it? BTW, OP-TEE driver seems to have a similar problem.

https://lkml.org/lkml/2017/11/29/230
		
> 
> ---8<----
> 
> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
> index af4c75217ea6..440d8f796faa 100644
> --- a/drivers/firmware/qcom_scm.c
> +++ b/drivers/firmware/qcom_scm.c
> @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
>  	int ret;
>  
>  	fw_np = of_find_node_by_name(NULL, "firmware");
> -
>  	if (!fw_np)
> -		return -ENODEV;
> -
> -	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
> -
> -	if (!np) {
> -		of_node_put(fw_np);
> -		return -ENODEV;
> -	}
> -
> -	of_node_put(np);
> +		return 0;
>  
>  	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
> -
>  	of_node_put(fw_np);
> -
>  	if (ret)
>  		return ret;
>  
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-07  8:42     ` Jerome Forissier
  0 siblings, 0 replies; 12+ messages in thread
From: Jerome Forissier @ 2017-12-07  8:42 UTC (permalink / raw)
  To: linux-arm-kernel



On 12/06/2017 09:06 PM, Stephen Boyd wrote:
> On 12/06, Loys Ollivier wrote:
>> When using other platform architectures, in the init of the qcom_scm
>> driver, of_node_put is called on /firmware if no qcom dt is found.
>> This results in a kernel error: Bad of_node_put() on /firmware.
>>
>> The call to of_node_put from the qcom_scm init is unnecessary as
>> of_find_matching_node is calling it automatically.
>>
>> Remove this of_node_put().
>>
>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>> ---
> 
> This still looks wrong. Especially if of_find_matching_node() is
> going to look for siblings of the /firmware node for the
> compatible string for scm device. Why do we check at all? Can't
> we just delete this and let of_platform_populate() take care of
> it? BTW, OP-TEE driver seems to have a similar problem.

https://lkml.org/lkml/2017/11/29/230
		
> 
> ---8<----
> 
> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
> index af4c75217ea6..440d8f796faa 100644
> --- a/drivers/firmware/qcom_scm.c
> +++ b/drivers/firmware/qcom_scm.c
> @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
>  	int ret;
>  
>  	fw_np = of_find_node_by_name(NULL, "firmware");
> -
>  	if (!fw_np)
> -		return -ENODEV;
> -
> -	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
> -
> -	if (!np) {
> -		of_node_put(fw_np);
> -		return -ENODEV;
> -	}
> -
> -	of_node_put(np);
> +		return 0;
>  
>  	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
> -
>  	of_node_put(fw_np);
> -
>  	if (ret)
>  		return ret;
>  
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
  2017-12-07  8:42     ` Jerome Forissier
@ 2017-12-07  9:34       ` Loys Ollivier
  -1 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-07  9:34 UTC (permalink / raw)
  To: Jerome Forissier, Stephen Boyd
  Cc: linux-arm-msm, linux-kernel, David Brown, Andy Gross, linux-soc,
	linux-arm-kernel, Jerome Brunet, Jens Wiklander



On 07/12/2017 09:42, Jerome Forissier wrote:
> 
> 
> On 12/06/2017 09:06 PM, Stephen Boyd wrote:
>> On 12/06, Loys Ollivier wrote:
>>> When using other platform architectures, in the init of the qcom_scm
>>> driver, of_node_put is called on /firmware if no qcom dt is found.
>>> This results in a kernel error: Bad of_node_put() on /firmware.
>>>
>>> The call to of_node_put from the qcom_scm init is unnecessary as
>>> of_find_matching_node is calling it automatically.
>>>
>>> Remove this of_node_put().
>>>
>>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>>> ---
>>
>> This still looks wrong. Especially if of_find_matching_node() is
>> going to look for siblings of the /firmware node for the
>> compatible string for scm device. Why do we check at all? Can't
>> we just delete this and let of_platform_populate() take care of
>> it? BTW, OP-TEE driver seems to have a similar problem.
> 
> https://lkml.org/lkml/2017/11/29/230
>
Well, the patch I sent is a fix for a specific bug I am encountering.
I tested the patch and it solves my problem. Stephen, your changes looks
good but it's a change in the driver's behavior. Maybe it could be
another patch ?
It looks like OP-TEE had the same idea.
>>
>> ---8<----
>>
>> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
>> index af4c75217ea6..440d8f796faa 100644
>> --- a/drivers/firmware/qcom_scm.c
>> +++ b/drivers/firmware/qcom_scm.c
>> @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
>>  	int ret;
>>  
>>  	fw_np = of_find_node_by_name(NULL, "firmware");
>> -
>>  	if (!fw_np)
>> -		return -ENODEV;
>> -
>> -	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
>> -
>> -	if (!np) {
>> -		of_node_put(fw_np);
>> -		return -ENODEV;
>> -	}
>> -
>> -	of_node_put(np);
>> +		return 0;
>>  
>>  	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
>> -
>>  	of_node_put(fw_np);
>> -
>>  	if (ret)
>>  		return ret;
>>  
>>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-07  9:34       ` Loys Ollivier
  0 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-07  9:34 UTC (permalink / raw)
  To: linux-arm-kernel



On 07/12/2017 09:42, Jerome Forissier wrote:
> 
> 
> On 12/06/2017 09:06 PM, Stephen Boyd wrote:
>> On 12/06, Loys Ollivier wrote:
>>> When using other platform architectures, in the init of the qcom_scm
>>> driver, of_node_put is called on /firmware if no qcom dt is found.
>>> This results in a kernel error: Bad of_node_put() on /firmware.
>>>
>>> The call to of_node_put from the qcom_scm init is unnecessary as
>>> of_find_matching_node is calling it automatically.
>>>
>>> Remove this of_node_put().
>>>
>>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>>> ---
>>
>> This still looks wrong. Especially if of_find_matching_node() is
>> going to look for siblings of the /firmware node for the
>> compatible string for scm device. Why do we check at all? Can't
>> we just delete this and let of_platform_populate() take care of
>> it? BTW, OP-TEE driver seems to have a similar problem.
> 
> https://lkml.org/lkml/2017/11/29/230
>
Well, the patch I sent is a fix for a specific bug I am encountering.
I tested the patch and it solves my problem. Stephen, your changes looks
good but it's a change in the driver's behavior. Maybe it could be
another patch ?
It looks like OP-TEE had the same idea.
>>
>> ---8<----
>>
>> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
>> index af4c75217ea6..440d8f796faa 100644
>> --- a/drivers/firmware/qcom_scm.c
>> +++ b/drivers/firmware/qcom_scm.c
>> @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
>>  	int ret;
>>  
>>  	fw_np = of_find_node_by_name(NULL, "firmware");
>> -
>>  	if (!fw_np)
>> -		return -ENODEV;
>> -
>> -	np = of_find_matching_node(fw_np, qcom_scm_dt_match);
>> -
>> -	if (!np) {
>> -		of_node_put(fw_np);
>> -		return -ENODEV;
>> -	}
>> -
>> -	of_node_put(np);
>> +		return 0;
>>  
>>  	ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
>> -
>>  	of_node_put(fw_np);
>> -
>>  	if (ret)
>>  		return ret;
>>  
>>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
  2017-12-07  9:34       ` Loys Ollivier
@ 2017-12-08 17:04         ` Stephen Boyd
  -1 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2017-12-08 17:04 UTC (permalink / raw)
  To: Loys Ollivier
  Cc: Jerome Forissier, linux-arm-msm, linux-kernel, David Brown,
	Andy Gross, linux-soc, linux-arm-kernel, Jerome Brunet,
	Jens Wiklander

On 12/07, Loys Ollivier wrote:
> 
> 
> On 07/12/2017 09:42, Jerome Forissier wrote:
> > 
> > 
> > On 12/06/2017 09:06 PM, Stephen Boyd wrote:
> >> On 12/06, Loys Ollivier wrote:
> >>> When using other platform architectures, in the init of the qcom_scm
> >>> driver, of_node_put is called on /firmware if no qcom dt is found.
> >>> This results in a kernel error: Bad of_node_put() on /firmware.
> >>>
> >>> The call to of_node_put from the qcom_scm init is unnecessary as
> >>> of_find_matching_node is calling it automatically.
> >>>
> >>> Remove this of_node_put().
> >>>
> >>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
> >>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
> >>> ---
> >>
> >> This still looks wrong. Especially if of_find_matching_node() is
> >> going to look for siblings of the /firmware node for the
> >> compatible string for scm device. Why do we check at all? Can't
> >> we just delete this and let of_platform_populate() take care of
> >> it? BTW, OP-TEE driver seems to have a similar problem.
> > 
> > https://lkml.org/lkml/2017/11/29/230
> >
> Well, the patch I sent is a fix for a specific bug I am encountering.
> I tested the patch and it solves my problem. Stephen, your changes looks
> good but it's a change in the driver's behavior. Maybe it could be
> another patch ?

Sure. But there's another of_node_put(fw_np) in this function, so
why isn't that also removed? Assuming of_find_matching_node() is
calling of_node_put() on what's passed in, then the node is going
to get put twice in the "working" case.

Andy?

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-08 17:04         ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2017-12-08 17:04 UTC (permalink / raw)
  To: linux-arm-kernel

On 12/07, Loys Ollivier wrote:
> 
> 
> On 07/12/2017 09:42, Jerome Forissier wrote:
> > 
> > 
> > On 12/06/2017 09:06 PM, Stephen Boyd wrote:
> >> On 12/06, Loys Ollivier wrote:
> >>> When using other platform architectures, in the init of the qcom_scm
> >>> driver, of_node_put is called on /firmware if no qcom dt is found.
> >>> This results in a kernel error: Bad of_node_put() on /firmware.
> >>>
> >>> The call to of_node_put from the qcom_scm init is unnecessary as
> >>> of_find_matching_node is calling it automatically.
> >>>
> >>> Remove this of_node_put().
> >>>
> >>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
> >>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
> >>> ---
> >>
> >> This still looks wrong. Especially if of_find_matching_node() is
> >> going to look for siblings of the /firmware node for the
> >> compatible string for scm device. Why do we check at all? Can't
> >> we just delete this and let of_platform_populate() take care of
> >> it? BTW, OP-TEE driver seems to have a similar problem.
> > 
> > https://lkml.org/lkml/2017/11/29/230
> >
> Well, the patch I sent is a fix for a specific bug I am encountering.
> I tested the patch and it solves my problem. Stephen, your changes looks
> good but it's a change in the driver's behavior. Maybe it could be
> another patch ?

Sure. But there's another of_node_put(fw_np) in this function, so
why isn't that also removed? Assuming of_find_matching_node() is
calling of_node_put() on what's passed in, then the node is going
to get put twice in the "working" case.

Andy?

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
  2017-12-08 17:04         ` Stephen Boyd
@ 2017-12-12 15:35           ` Loys Ollivier
  -1 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-12 15:35 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Jerome Forissier, linux-arm-msm, linux-kernel, David Brown,
	Andy Gross, linux-soc, linux-arm-kernel, Jerome Brunet,
	Jens Wiklander



On 08/12/2017 18:04, Stephen Boyd wrote:
> On 12/07, Loys Ollivier wrote:
>>
>>
>> On 07/12/2017 09:42, Jerome Forissier wrote:
>>>
>>>
>>> On 12/06/2017 09:06 PM, Stephen Boyd wrote:
>>>> On 12/06, Loys Ollivier wrote:
>>>>> When using other platform architectures, in the init of the qcom_scm
>>>>> driver, of_node_put is called on /firmware if no qcom dt is found.
>>>>> This results in a kernel error: Bad of_node_put() on /firmware.
>>>>>
>>>>> The call to of_node_put from the qcom_scm init is unnecessary as
>>>>> of_find_matching_node is calling it automatically.
>>>>>
>>>>> Remove this of_node_put().
>>>>>
>>>>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>>>>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>>>>> ---
>>>>
>>>> This still looks wrong. Especially if of_find_matching_node() is
>>>> going to look for siblings of the /firmware node for the
>>>> compatible string for scm device. Why do we check at all? Can't
>>>> we just delete this and let of_platform_populate() take care of
>>>> it? BTW, OP-TEE driver seems to have a similar problem.
>>>
>>> https://lkml.org/lkml/2017/11/29/230
>>>
>> Well, the patch I sent is a fix for a specific bug I am encountering.
>> I tested the patch and it solves my problem. Stephen, your changes looks
>> good but it's a change in the driver's behavior. Maybe it could be
>> another patch ?
> 
> Sure. But there's another of_node_put(fw_np) in this function, so
> why isn't that also removed? Assuming of_find_matching_node() is
> calling of_node_put() on what's passed in, then the node is going
> to get put twice in the "working" case.
> 
> Andy?
>
Agreed, I had a look and this second call to of_node_put(fw_np) seem to
be unnecessary as well. Unfortunately I can't test your suggestion as I
am using another platform arch. I am just testing that this driver does
not break my arch.
I can submit a v3 removing this of_node_put as well if you want.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init
@ 2017-12-12 15:35           ` Loys Ollivier
  0 siblings, 0 replies; 12+ messages in thread
From: Loys Ollivier @ 2017-12-12 15:35 UTC (permalink / raw)
  To: linux-arm-kernel



On 08/12/2017 18:04, Stephen Boyd wrote:
> On 12/07, Loys Ollivier wrote:
>>
>>
>> On 07/12/2017 09:42, Jerome Forissier wrote:
>>>
>>>
>>> On 12/06/2017 09:06 PM, Stephen Boyd wrote:
>>>> On 12/06, Loys Ollivier wrote:
>>>>> When using other platform architectures, in the init of the qcom_scm
>>>>> driver, of_node_put is called on /firmware if no qcom dt is found.
>>>>> This results in a kernel error: Bad of_node_put() on /firmware.
>>>>>
>>>>> The call to of_node_put from the qcom_scm init is unnecessary as
>>>>> of_find_matching_node is calling it automatically.
>>>>>
>>>>> Remove this of_node_put().
>>>>>
>>>>> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
>>>>> Signed-off-by: Loys Ollivier <lollivier@baylibre.com>
>>>>> ---
>>>>
>>>> This still looks wrong. Especially if of_find_matching_node() is
>>>> going to look for siblings of the /firmware node for the
>>>> compatible string for scm device. Why do we check at all? Can't
>>>> we just delete this and let of_platform_populate() take care of
>>>> it? BTW, OP-TEE driver seems to have a similar problem.
>>>
>>> https://lkml.org/lkml/2017/11/29/230
>>>
>> Well, the patch I sent is a fix for a specific bug I am encountering.
>> I tested the patch and it solves my problem. Stephen, your changes looks
>> good but it's a change in the driver's behavior. Maybe it could be
>> another patch ?
> 
> Sure. But there's another of_node_put(fw_np) in this function, so
> why isn't that also removed? Assuming of_find_matching_node() is
> calling of_node_put() on what's passed in, then the node is going
> to get put twice in the "working" case.
> 
> Andy?
>
Agreed, I had a look and this second call to of_node_put(fw_np) seem to
be unnecessary as well. Unfortunately I can't test your suggestion as I
am using another platform arch. I am just testing that this driver does
not break my arch.
I can submit a v3 removing this of_node_put as well if you want.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-12-12 15:35 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-06 10:21 [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init Loys Ollivier
2017-12-06 10:21 ` Loys Ollivier
2017-12-06 20:06 ` Stephen Boyd
2017-12-06 20:06   ` Stephen Boyd
2017-12-07  8:42   ` Jerome Forissier
2017-12-07  8:42     ` Jerome Forissier
2017-12-07  9:34     ` Loys Ollivier
2017-12-07  9:34       ` Loys Ollivier
2017-12-08 17:04       ` Stephen Boyd
2017-12-08 17:04         ` Stephen Boyd
2017-12-12 15:35         ` Loys Ollivier
2017-12-12 15:35           ` Loys Ollivier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.