All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liang He" <windhl@126.com>
To: "Michael Ellerman" <mpe@ellerman.id.au>
Cc: nixiaoming@huawei.com, linux-kernel@vger.kernel.org,
	oss@buserror.net, paulus@samba.org,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	linuxppc-dev@lists.ozlabs.org
Subject: Re:Re:Re: [PATCH v2] arch: powerpc: platforms: 85xx: Add missing of_node_put in sgy_cts1000.c
Date: Fri, 17 Jun 2022 13:13:36 +0800 (CST)	[thread overview]
Message-ID: <745d8407.37fa.1817014bd62.Coremail.windhl@126.com> (raw)
In-Reply-To: <87ilozc3qp.fsf@mpe.ellerman.id.au>



 2022-06-17 12:29:02,"Michael Ellerman" <mpe@ellerman.id.au> 写道:
>"Liang He" <windhl@126.com> writes:
>> At 2022-06-17 07:37:06, "Michael Ellerman" <mpe@ellerman.id.au> wrote:
>>>Christophe JAILLET <christophe.jaillet@wanadoo.fr> writes:
>>>> Le 16/06/2022 à 17:19, Liang He a écrit :
>>>>> In gpio_halt_probe(), of_find_matching_node() will return a node pointer with
>>>>> refcount incremented. We should use of_node_put() in each fail path or when it
>>>>> is not used anymore.
>>>>> 
>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>> ---
>>>>>   changelog:
>>>>> 
>>>>>   v2: use goto-label patch style advised by Christophe.
>>>>>   v1: add of_node_put() before each exit.
>>>>> 
>>>>>   arch/powerpc/platforms/85xx/sgy_cts1000.c | 27 +++++++++++++++--------
>>>>>   1 file changed, 18 insertions(+), 9 deletions(-)
>>>>> 
>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> index 98ae64075193..e280f963d88c 100644
>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> @@ -73,6 +73,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>...
>>>>> @@ -122,8 +127,12 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>   
>>>>>   	printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
>>>>>   	       " irq).\n", gpio, trigger, irq);
>>>>> +	ret = 0;
>>>>>   
>>>>> -	return 0;
>>>>> +err_put:
>>>>> +	of_node_put(halt_node);
>>>>> +	halt_node = NULL;
>>>>
>>>> Hi,
>>>> so now we set 'halt_node' to NULL even in the normal case.
>>>> This is really spurious.
>>>>
>>>> Look at gpio_halt_cb(), but I think that this is just wrong and badly 
>>>> breaks this driver.
>>>
>>>I agree, thanks for reviewing.
>>>
>>>I think the cleanest solution is to use a local variable for the node in
>>>the body of gpio_halt_probe(), and only assign to halt_node once all the
>>>checks have passed.
>>>
>>>So something like:
>>>
>>>        struct device_node *child_node;
>>>
>>>	child_node = of_find_matching_node(node, child_match);
>>>        ...
>>>
>>>	printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
>>>	       " irq).\n", gpio, trigger, irq);
>>>        ret = 0;
>>>        halt_node = of_node_get(child_node);
>>>
>>>out_put:
>>>        of_node_put(child_node);
>>>        
>>>	return ret;
>>>}
>>>
>>>
>>>cheers
>>
>> Hi, Michael and Christophe,
>>
>> I am writing the new patch based on Michael's advice. However, I wonder if there is
>> any place to call of_node_put(halt_node)?  As I do not exactly know if gpio_halt_remove()
>> or anyother place can correctly release this global reference?
>> If not, it is correct that I add a of_node_put(halt_node) in gpio_halt_remove(), right?
>
>Yes I think so, just before it's set to NULL, eg:
>
>diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>index 98ae64075193..7beb3cd420ba 100644
>--- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>+++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>@@ -139,6 +139,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
> 
> 		gpio_free(gpio);
> 
>+		of_node_put(halt_node);
> 		halt_node = NULL;
> 	}
> 
>
>cheers



Ok, I will make the new patch soon.

WARNING: multiple messages have this Message-ID (diff)
From: "Liang He" <windhl@126.com>
To: "Michael Ellerman" <mpe@ellerman.id.au>
Cc: "Christophe JAILLET" <christophe.jaillet@wanadoo.fr>,
	oss@buserror.net, paulus@samba.org, christophe.leroy@csgroup.eu,
	nixiaoming@huawei.com, linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org
Subject: Re:Re:Re: [PATCH v2] arch: powerpc: platforms: 85xx: Add missing of_node_put in sgy_cts1000.c
Date: Fri, 17 Jun 2022 13:13:36 +0800 (CST)	[thread overview]
Message-ID: <745d8407.37fa.1817014bd62.Coremail.windhl@126.com> (raw)
In-Reply-To: <87ilozc3qp.fsf@mpe.ellerman.id.au>



 2022-06-17 12:29:02,"Michael Ellerman" <mpe@ellerman.id.au> 写道:
>"Liang He" <windhl@126.com> writes:
>> At 2022-06-17 07:37:06, "Michael Ellerman" <mpe@ellerman.id.au> wrote:
>>>Christophe JAILLET <christophe.jaillet@wanadoo.fr> writes:
>>>> Le 16/06/2022 à 17:19, Liang He a écrit :
>>>>> In gpio_halt_probe(), of_find_matching_node() will return a node pointer with
>>>>> refcount incremented. We should use of_node_put() in each fail path or when it
>>>>> is not used anymore.
>>>>> 
>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>> ---
>>>>>   changelog:
>>>>> 
>>>>>   v2: use goto-label patch style advised by Christophe.
>>>>>   v1: add of_node_put() before each exit.
>>>>> 
>>>>>   arch/powerpc/platforms/85xx/sgy_cts1000.c | 27 +++++++++++++++--------
>>>>>   1 file changed, 18 insertions(+), 9 deletions(-)
>>>>> 
>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> index 98ae64075193..e280f963d88c 100644
>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> @@ -73,6 +73,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>...
>>>>> @@ -122,8 +127,12 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>   
>>>>>   	printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
>>>>>   	       " irq).\n", gpio, trigger, irq);
>>>>> +	ret = 0;
>>>>>   
>>>>> -	return 0;
>>>>> +err_put:
>>>>> +	of_node_put(halt_node);
>>>>> +	halt_node = NULL;
>>>>
>>>> Hi,
>>>> so now we set 'halt_node' to NULL even in the normal case.
>>>> This is really spurious.
>>>>
>>>> Look at gpio_halt_cb(), but I think that this is just wrong and badly 
>>>> breaks this driver.
>>>
>>>I agree, thanks for reviewing.
>>>
>>>I think the cleanest solution is to use a local variable for the node in
>>>the body of gpio_halt_probe(), and only assign to halt_node once all the
>>>checks have passed.
>>>
>>>So something like:
>>>
>>>        struct device_node *child_node;
>>>
>>>	child_node = of_find_matching_node(node, child_match);
>>>        ...
>>>
>>>	printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
>>>	       " irq).\n", gpio, trigger, irq);
>>>        ret = 0;
>>>        halt_node = of_node_get(child_node);
>>>
>>>out_put:
>>>        of_node_put(child_node);
>>>        
>>>	return ret;
>>>}
>>>
>>>
>>>cheers
>>
>> Hi, Michael and Christophe,
>>
>> I am writing the new patch based on Michael's advice. However, I wonder if there is
>> any place to call of_node_put(halt_node)?  As I do not exactly know if gpio_halt_remove()
>> or anyother place can correctly release this global reference?
>> If not, it is correct that I add a of_node_put(halt_node) in gpio_halt_remove(), right?
>
>Yes I think so, just before it's set to NULL, eg:
>
>diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>index 98ae64075193..7beb3cd420ba 100644
>--- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>+++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>@@ -139,6 +139,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
> 
> 		gpio_free(gpio);
> 
>+		of_node_put(halt_node);
> 		halt_node = NULL;
> 	}
> 
>
>cheers



Ok, I will make the new patch soon.

  reply	other threads:[~2022-06-17  5:14 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-16 15:19 [PATCH v2] arch: powerpc: platforms: 85xx: Add missing of_node_put in sgy_cts1000.c Liang He
2022-06-16 15:19 ` Liang He
2022-06-16 18:54 ` Christophe JAILLET
2022-06-16 23:37   ` Michael Ellerman
2022-06-17  1:24     ` Liang He
2022-06-17  1:24       ` Liang He
2022-06-17  2:25     ` Liang He
2022-06-17  2:25       ` Liang He
2022-06-17  4:29       ` Michael Ellerman
2022-06-17  4:29         ` Michael Ellerman
2022-06-17  5:13         ` Liang He [this message]
2022-06-17  5:13           ` Liang He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=745d8407.37fa.1817014bd62.Coremail.windhl@126.com \
    --to=windhl@126.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=nixiaoming@huawei.com \
    --cc=oss@buserror.net \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.