* [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
@ 2022-06-17 6:08 Liang He
2022-06-17 6:28 ` Christophe Leroy
0 siblings, 1 reply; 10+ messages in thread
From: Liang He @ 2022-06-17 6:08 UTC (permalink / raw)
To: oss, mpe, benh, paulus; +Cc: windhl, linuxppc-dev, linux-kernel
In gpio_halt_probe(), of_find_matching_node() will return a node
pointer with refcount incremented. We should use of_node_put() in
fail path or when it is not used anymore.
Signed-off-by: Liang He <windhl@126.com>
---
changelog:
v4: reuse exist 'err' and use a simple code style, advised by CJ
v3: use local 'child_node' advised by Michael.
v2: use goto-label patch style advised by Christophe Leroy.
v1: add of_node_put() before each exit.
arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
index 98ae64075193..e4588943fe7e 100644
--- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
+++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
@@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
{
enum of_gpio_flags flags;
struct device_node *node = pdev->dev.of_node;
+ struct device_node *child_node;
int gpio, err, irq;
int trigger;
@@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
return -ENODEV;
/* If there's no matching child, this isn't really an error */
- halt_node = of_find_matching_node(node, child_match);
- if (!halt_node)
+ child_node = of_find_matching_node(node, child_match);
+ if (!child_node)
return 0;
/* Technically we could just read the first one, but punish
* DT writers for invalid form. */
- if (of_gpio_count(halt_node) != 1)
- return -EINVAL;
+ if (of_gpio_count(child_node) != 1) {
+ err = -EINVAL;
+ goto err_put;
+ }
/* Get the gpio number relative to the dynamic base. */
- gpio = of_get_gpio_flags(halt_node, 0, &flags);
- if (!gpio_is_valid(gpio))
- return -EINVAL;
+ gpio = of_get_gpio_flags(child_node, 0, &flags);
+ if (!gpio_is_valid(gpio)) {
+ err = -EINVAL;
+ gotot err_put;
+ }
err = gpio_request(gpio, "gpio-halt");
if (err) {
printk(KERN_ERR "gpio-halt: error requesting GPIO %d.\n",
gpio);
- halt_node = NULL;
- return err;
+ goto err_put;
}
trigger = (flags == OF_GPIO_ACTIVE_LOW);
@@ -105,15 +109,14 @@ static int gpio_halt_probe(struct platform_device *pdev)
gpio_direction_output(gpio, !trigger);
/* Now get the IRQ which tells us when the power button is hit */
- irq = irq_of_parse_and_map(halt_node, 0);
+ irq = irq_of_parse_and_map(child_node, 0);
err = request_irq(irq, gpio_halt_irq, IRQF_TRIGGER_RISING |
- IRQF_TRIGGER_FALLING, "gpio-halt", halt_node);
+ IRQF_TRIGGER_FALLING, "gpio-halt", child_node);
if (err) {
printk(KERN_ERR "gpio-halt: error requesting IRQ %d for "
"GPIO %d.\n", irq, gpio);
gpio_free(gpio);
- halt_node = NULL;
- return err;
+ goto err_put;
}
/* Register our halt function */
@@ -123,7 +126,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);
+ halt_node = child_node;
return 0;
+
+err_put:
+ of_node_put(child_node);
+ return err;
}
static int gpio_halt_remove(struct platform_device *pdev)
@@ -139,6 +147,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
gpio_free(gpio);
+ of_node_put(halt_node);
halt_node = NULL;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 6:08 [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000 Liang He
@ 2022-06-17 6:28 ` Christophe Leroy
2022-06-17 6:45 ` Liang He
0 siblings, 1 reply; 10+ messages in thread
From: Christophe Leroy @ 2022-06-17 6:28 UTC (permalink / raw)
To: Liang He, oss@buserror.net, mpe@ellerman.id.au,
benh@kernel.crashing.org, paulus@samba.org
Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Le 17/06/2022 à 08:08, 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
> fail path or when it is not used anymore.
>
> Signed-off-by: Liang He <windhl@126.com>
> ---
> changelog:
> v4: reuse exist 'err' and use a simple code style, advised by CJ
> v3: use local 'child_node' advised by Michael.
> v2: use goto-label patch style advised by Christophe Leroy.
> v1: add of_node_put() before each exit.
>
> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
> 1 file changed, 22 insertions(+), 13 deletions(-)
>
> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
> index 98ae64075193..e4588943fe7e 100644
> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
> {
> enum of_gpio_flags flags;
> struct device_node *node = pdev->dev.of_node;
> + struct device_node *child_node;
> int gpio, err, irq;
> int trigger;
>
> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
> return -ENODEV;
>
> /* If there's no matching child, this isn't really an error */
> - halt_node = of_find_matching_node(node, child_match);
> - if (!halt_node)
> + child_node = of_find_matching_node(node, child_match);
> + if (!child_node)
> return 0;
>
> /* Technically we could just read the first one, but punish
> * DT writers for invalid form. */
> - if (of_gpio_count(halt_node) != 1)
> - return -EINVAL;
> + if (of_gpio_count(child_node) != 1) {
> + err = -EINVAL;
> + goto err_put;
> + }
>
> /* Get the gpio number relative to the dynamic base. */
> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
> - if (!gpio_is_valid(gpio))
> - return -EINVAL;
> + gpio = of_get_gpio_flags(child_node, 0, &flags);
> + if (!gpio_is_valid(gpio)) {
> + err = -EINVAL;
> + gotot err_put;
Did you test the build ?
> + }
>
> err = gpio_request(gpio, "gpio-halt");
> if (err) {
> printk(KERN_ERR "gpio-halt: error requesting GPIO %d.\n",
> gpio);
> - halt_node = NULL;
> - return err;
> + goto err_put;
> }
>
> trigger = (flags == OF_GPIO_ACTIVE_LOW);
> @@ -105,15 +109,14 @@ static int gpio_halt_probe(struct platform_device *pdev)
> gpio_direction_output(gpio, !trigger);
>
> /* Now get the IRQ which tells us when the power button is hit */
> - irq = irq_of_parse_and_map(halt_node, 0);
> + irq = irq_of_parse_and_map(child_node, 0);
> err = request_irq(irq, gpio_halt_irq, IRQF_TRIGGER_RISING |
> - IRQF_TRIGGER_FALLING, "gpio-halt", halt_node);
> + IRQF_TRIGGER_FALLING, "gpio-halt", child_node);
> if (err) {
> printk(KERN_ERR "gpio-halt: error requesting IRQ %d for "
> "GPIO %d.\n", irq, gpio);
> gpio_free(gpio);
> - halt_node = NULL;
> - return err;
> + goto err_put;
> }
>
> /* Register our halt function */
> @@ -123,7 +126,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);
>
> + halt_node = child_node;
> return 0;
> +
> +err_put:
> + of_node_put(child_node);
> + return err;
> }
>
> static int gpio_halt_remove(struct platform_device *pdev)
> @@ -139,6 +147,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
>
> gpio_free(gpio);
>
> + of_node_put(halt_node);
> halt_node = NULL;
> }
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re:Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 6:28 ` Christophe Leroy
@ 2022-06-17 6:45 ` Liang He
2022-06-17 6:53 ` Christophe Leroy
0 siblings, 1 reply; 10+ messages in thread
From: Liang He @ 2022-06-17 6:45 UTC (permalink / raw)
To: Christophe Leroy
Cc: oss@buserror.net, mpe@ellerman.id.au, benh@kernel.crashing.org,
paulus@samba.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org
At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>
>
>Le 17/06/2022 à 08:08, 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
>> fail path or when it is not used anymore.
>>
>> Signed-off-by: Liang He <windhl@126.com>
>> ---
>> changelog:
>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>> v3: use local 'child_node' advised by Michael.
>> v2: use goto-label patch style advised by Christophe Leroy.
>> v1: add of_node_put() before each exit.
>>
>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>
>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>> index 98ae64075193..e4588943fe7e 100644
>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>> {
>> enum of_gpio_flags flags;
>> struct device_node *node = pdev->dev.of_node;
>> + struct device_node *child_node;
>> int gpio, err, irq;
>> int trigger;
>>
>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>> return -ENODEV;
>>
>> /* If there's no matching child, this isn't really an error */
>> - halt_node = of_find_matching_node(node, child_match);
>> - if (!halt_node)
>> + child_node = of_find_matching_node(node, child_match);
>> + if (!child_node)
>> return 0;
>>
>> /* Technically we could just read the first one, but punish
>> * DT writers for invalid form. */
>> - if (of_gpio_count(halt_node) != 1)
>> - return -EINVAL;
>> + if (of_gpio_count(child_node) != 1) {
>> + err = -EINVAL;
>> + goto err_put;
>> + }
>>
>> /* Get the gpio number relative to the dynamic base. */
>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>> - if (!gpio_is_valid(gpio))
>> - return -EINVAL;
>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>> + if (!gpio_is_valid(gpio)) {
>> + err = -EINVAL;
>> + gotot err_put;
>
>Did you test the build ?
Sorry for this fault.
In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
Now I am try using QEMU.
Anyway, sorry for this fault.
>
>> + }
>>
>> err = gpio_request(gpio, "gpio-halt");
>> if (err) {
>> printk(KERN_ERR "gpio-halt: error requesting GPIO %d.\n",
>> gpio);
>> - halt_node = NULL;
>> - return err;
>> + goto err_put;
>> }
>>
>> trigger = (flags == OF_GPIO_ACTIVE_LOW);
>> @@ -105,15 +109,14 @@ static int gpio_halt_probe(struct platform_device *pdev)
>> gpio_direction_output(gpio, !trigger);
>>
>> /* Now get the IRQ which tells us when the power button is hit */
>> - irq = irq_of_parse_and_map(halt_node, 0);
>> + irq = irq_of_parse_and_map(child_node, 0);
>> err = request_irq(irq, gpio_halt_irq, IRQF_TRIGGER_RISING |
>> - IRQF_TRIGGER_FALLING, "gpio-halt", halt_node);
>> + IRQF_TRIGGER_FALLING, "gpio-halt", child_node);
>> if (err) {
>> printk(KERN_ERR "gpio-halt: error requesting IRQ %d for "
>> "GPIO %d.\n", irq, gpio);
>> gpio_free(gpio);
>> - halt_node = NULL;
>> - return err;
>> + goto err_put;
>> }
>>
>> /* Register our halt function */
>> @@ -123,7 +126,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);
>>
>> + halt_node = child_node;
>> return 0;
>> +
>> +err_put:
>> + of_node_put(child_node);
>> + return err;
>> }
>>
>> static int gpio_halt_remove(struct platform_device *pdev)
>> @@ -139,6 +147,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
>>
>> gpio_free(gpio);
>>
>> + of_node_put(halt_node);
>> halt_node = NULL;
>> }
>>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 6:45 ` Liang He
@ 2022-06-17 6:53 ` Christophe Leroy
2022-06-17 8:17 ` Liang He
0 siblings, 1 reply; 10+ messages in thread
From: Christophe Leroy @ 2022-06-17 6:53 UTC (permalink / raw)
To: Liang He
Cc: oss@buserror.net, mpe@ellerman.id.au, benh@kernel.crashing.org,
paulus@samba.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org
Le 17/06/2022 à 08:45, Liang He a écrit :
>
>
>
> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>
>>
>> Le 17/06/2022 à 08:08, 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
>>> fail path or when it is not used anymore.
>>>
>>> Signed-off-by: Liang He <windhl@126.com>
>>> ---
>>> changelog:
>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>> v3: use local 'child_node' advised by Michael.
>>> v2: use goto-label patch style advised by Christophe Leroy.
>>> v1: add of_node_put() before each exit.
>>>
>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>> index 98ae64075193..e4588943fe7e 100644
>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>> {
>>> enum of_gpio_flags flags;
>>> struct device_node *node = pdev->dev.of_node;
>>> + struct device_node *child_node;
>>> int gpio, err, irq;
>>> int trigger;
>>>
>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>> return -ENODEV;
>>>
>>> /* If there's no matching child, this isn't really an error */
>>> - halt_node = of_find_matching_node(node, child_match);
>>> - if (!halt_node)
>>> + child_node = of_find_matching_node(node, child_match);
>>> + if (!child_node)
>>> return 0;
>>>
>>> /* Technically we could just read the first one, but punish
>>> * DT writers for invalid form. */
>>> - if (of_gpio_count(halt_node) != 1)
>>> - return -EINVAL;
>>> + if (of_gpio_count(child_node) != 1) {
>>> + err = -EINVAL;
>>> + goto err_put;
>>> + }
>>>
>>> /* Get the gpio number relative to the dynamic base. */
>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>> - if (!gpio_is_valid(gpio))
>>> - return -EINVAL;
>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>> + if (!gpio_is_valid(gpio)) {
>>> + err = -EINVAL;
>>> + gotot err_put;
>>
>> Did you test the build ?
>
> Sorry for this fault.
>
> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>
> Now I am try using QEMU.
>
> Anyway, sorry for this fault.
You can find cross compilers for most architectures for x86-64 here :
https://mirrors.edge.kernel.org/pub/tools/crosstool/
Christophe
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re:Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 6:53 ` Christophe Leroy
@ 2022-06-17 8:17 ` Liang He
2022-06-17 8:27 ` Conor.Dooley
0 siblings, 1 reply; 10+ messages in thread
From: Liang He @ 2022-06-17 8:17 UTC (permalink / raw)
To: Christophe Leroy, Conor.Dooley
Cc: oss@buserror.net, mpe@ellerman.id.au, benh@kernel.crashing.org,
paulus@samba.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org
At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>
>
>Le 17/06/2022 à 08:45, Liang He a écrit :
>>
>>
>>
>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>
>>>
>>> Le 17/06/2022 à 08:08, 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
>>>> fail path or when it is not used anymore.
>>>>
>>>> Signed-off-by: Liang He <windhl@126.com>
>>>> ---
>>>> changelog:
>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>> v3: use local 'child_node' advised by Michael.
>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>> v1: add of_node_put() before each exit.
>>>>
>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>
>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>> index 98ae64075193..e4588943fe7e 100644
>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>> {
>>>> enum of_gpio_flags flags;
>>>> struct device_node *node = pdev->dev.of_node;
>>>> + struct device_node *child_node;
>>>> int gpio, err, irq;
>>>> int trigger;
>>>>
>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>> return -ENODEV;
>>>>
>>>> /* If there's no matching child, this isn't really an error */
>>>> - halt_node = of_find_matching_node(node, child_match);
>>>> - if (!halt_node)
>>>> + child_node = of_find_matching_node(node, child_match);
>>>> + if (!child_node)
>>>> return 0;
>>>>
>>>> /* Technically we could just read the first one, but punish
>>>> * DT writers for invalid form. */
>>>> - if (of_gpio_count(halt_node) != 1)
>>>> - return -EINVAL;
>>>> + if (of_gpio_count(child_node) != 1) {
>>>> + err = -EINVAL;
>>>> + goto err_put;
>>>> + }
>>>>
>>>> /* Get the gpio number relative to the dynamic base. */
>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>> - if (!gpio_is_valid(gpio))
>>>> - return -EINVAL;
>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>> + if (!gpio_is_valid(gpio)) {
>>>> + err = -EINVAL;
>>>> + gotot err_put;
>>>
>>> Did you test the build ?
>>
>> Sorry for this fault.
>>
>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>
>> Now I am try using QEMU.
>>
>> Anyway, sorry for this fault.
>
>You can find cross compilers for most architectures for x86-64 here :
>https://mirrors.edge.kernel.org/pub/tools/crosstool/
>
>Christophe
Hi, Christophe and Conor.
Sorry to trouble you again.
Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
there are still too many other errors.
So if there is any efficient way to check my patch code to avoid 'gotot' error again.
Thanks again, Christophe and Conor.
Liang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 8:17 ` Liang He
@ 2022-06-17 8:27 ` Conor.Dooley
2022-06-17 8:34 ` Liang He
2022-06-17 10:47 ` Liang He
0 siblings, 2 replies; 10+ messages in thread
From: Conor.Dooley @ 2022-06-17 8:27 UTC (permalink / raw)
To: windhl, christophe.leroy, Conor.Dooley
Cc: oss, mpe, benh, paulus, linuxppc-dev, linux-kernel
On 17/06/2022 09:17, Liang He wrote:
>
>
>
> At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>
>>
>> Le 17/06/2022 à 08:45, Liang He a écrit :
>>>
>>>
>>>
>>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>
>>>>
>>>> Le 17/06/2022 à 08:08, 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
>>>>> fail path or when it is not used anymore.
>>>>>
>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>> ---
>>>>> changelog:
>>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>>> v3: use local 'child_node' advised by Michael.
>>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>>> v1: add of_node_put() before each exit.
>>>>>
>>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>>
>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> index 98ae64075193..e4588943fe7e 100644
>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>> {
>>>>> enum of_gpio_flags flags;
>>>>> struct device_node *node = pdev->dev.of_node;
>>>>> + struct device_node *child_node;
>>>>> int gpio, err, irq;
>>>>> int trigger;
>>>>>
>>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>> return -ENODEV;
>>>>>
>>>>> /* If there's no matching child, this isn't really an error */
>>>>> - halt_node = of_find_matching_node(node, child_match);
>>>>> - if (!halt_node)
>>>>> + child_node = of_find_matching_node(node, child_match);
>>>>> + if (!child_node)
>>>>> return 0;
>>>>>
>>>>> /* Technically we could just read the first one, but punish
>>>>> * DT writers for invalid form. */
>>>>> - if (of_gpio_count(halt_node) != 1)
>>>>> - return -EINVAL;
>>>>> + if (of_gpio_count(child_node) != 1) {
>>>>> + err = -EINVAL;
>>>>> + goto err_put;
>>>>> + }
>>>>>
>>>>> /* Get the gpio number relative to the dynamic base. */
>>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>>> - if (!gpio_is_valid(gpio))
>>>>> - return -EINVAL;
>>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>>> + if (!gpio_is_valid(gpio)) {
>>>>> + err = -EINVAL;
>>>>> + gotot err_put;
>>>>
>>>> Did you test the build ?
>>>
>>> Sorry for this fault.
>>>
>>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>>
>>> Now I am try using QEMU.
>>>
>>> Anyway, sorry for this fault.
>>
>> You can find cross compilers for most architectures for x86-64 here :
>> https://mirrors.edge.kernel.org/pub/tools/crosstool/
>>
>> Christophe
>
> Hi, Christophe and Conor.
>
> Sorry to trouble you again.
>
> Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
>
> For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
> But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
> there are still too many other errors.
>
> So if there is any efficient way to check my patch code to avoid 'gotot' error again.
idk anything about powerpc, but what I find is a nice way to get a compiler
for an arch I don't use is to search on lore.kernel.org for a 0day robot
build error since it gives instructions for building on that arch.
For example:
https://lore.kernel.org/linuxppc-dev/202206060910.rYNTFqdI-lkp@intel.com/
In this case, your bug seems obvious? You typed "gotot" instead of "goto".
Hope that helps,
Conor.
>
> Thanks again, Christophe and Conor.
>
> Liang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re:Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 8:27 ` Conor.Dooley
@ 2022-06-17 8:34 ` Liang He
2022-06-17 10:47 ` Liang He
1 sibling, 0 replies; 10+ messages in thread
From: Liang He @ 2022-06-17 8:34 UTC (permalink / raw)
To: Conor.Dooley
Cc: christophe.leroy, oss, mpe, benh, paulus, linuxppc-dev,
linux-kernel
At 2022-06-17 16:27:03, Conor.Dooley@microchip.com wrote:
>On 17/06/2022 09:17, Liang He wrote:
>>
>>
>>
>> At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>
>>>
>>> Le 17/06/2022 à 08:45, Liang He a écrit :
>>>>
>>>>
>>>>
>>>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>>
>>>>>
>>>>> Le 17/06/2022 à 08:08, 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
>>>>>> fail path or when it is not used anymore.
>>>>>>
>>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>>> ---
>>>>>> changelog:
>>>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>>>> v3: use local 'child_node' advised by Michael.
>>>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>>>> v1: add of_node_put() before each exit.
>>>>>>
>>>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>>>
>>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> index 98ae64075193..e4588943fe7e 100644
>>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>> {
>>>>>> enum of_gpio_flags flags;
>>>>>> struct device_node *node = pdev->dev.of_node;
>>>>>> + struct device_node *child_node;
>>>>>> int gpio, err, irq;
>>>>>> int trigger;
>>>>>>
>>>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>> return -ENODEV;
>>>>>>
>>>>>> /* If there's no matching child, this isn't really an error */
>>>>>> - halt_node = of_find_matching_node(node, child_match);
>>>>>> - if (!halt_node)
>>>>>> + child_node = of_find_matching_node(node, child_match);
>>>>>> + if (!child_node)
>>>>>> return 0;
>>>>>>
>>>>>> /* Technically we could just read the first one, but punish
>>>>>> * DT writers for invalid form. */
>>>>>> - if (of_gpio_count(halt_node) != 1)
>>>>>> - return -EINVAL;
>>>>>> + if (of_gpio_count(child_node) != 1) {
>>>>>> + err = -EINVAL;
>>>>>> + goto err_put;
>>>>>> + }
>>>>>>
>>>>>> /* Get the gpio number relative to the dynamic base. */
>>>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>>>> - if (!gpio_is_valid(gpio))
>>>>>> - return -EINVAL;
>>>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>>>> + if (!gpio_is_valid(gpio)) {
>>>>>> + err = -EINVAL;
>>>>>> + gotot err_put;
>>>>>
>>>>> Did you test the build ?
>>>>
>>>> Sorry for this fault.
>>>>
>>>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>>>
>>>> Now I am try using QEMU.
>>>>
>>>> Anyway, sorry for this fault.
>>>
>>> You can find cross compilers for most architectures for x86-64 here :
>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/
>>>
>>> Christophe
>>
>> Hi, Christophe and Conor.
>>
>> Sorry to trouble you again.
>>
>> Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
>>
>> For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
>> But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
>> there are still too many other errors.
>>
>> So if there is any efficient way to check my patch code to avoid 'gotot' error again.
>
>idk anything about powerpc, but what I find is a nice way to get a compiler
>for an arch I don't use is to search on lore.kernel.org for a 0day robot
>build error since it gives instructions for building on that arch.
>For example:
>https://lore.kernel.org/linuxppc-dev/202206060910.rYNTFqdI-lkp@intel.com/
>
>
>In this case, your bug seems obvious? You typed "gotot" instead of "goto".
>
>Hope that helps,
>Conor.
>
>>
>> Thanks again, Christophe and Conor.
>>
>> Liang
Thanks so much, I will try it.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re:Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 8:27 ` Conor.Dooley
2022-06-17 8:34 ` Liang He
@ 2022-06-17 10:47 ` Liang He
2022-06-17 10:57 ` Christophe Leroy
1 sibling, 1 reply; 10+ messages in thread
From: Liang He @ 2022-06-17 10:47 UTC (permalink / raw)
To: Conor.Dooley
Cc: christophe.leroy, oss, mpe, benh, paulus, linuxppc-dev,
linux-kernel
At 2022-06-17 16:27:03, Conor.Dooley@microchip.com wrote:
>On 17/06/2022 09:17, Liang He wrote:
>>
>>
>>
>> At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>
>>>
>>> Le 17/06/2022 à 08:45, Liang He a écrit :
>>>>
>>>>
>>>>
>>>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>>
>>>>>
>>>>> Le 17/06/2022 à 08:08, 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
>>>>>> fail path or when it is not used anymore.
>>>>>>
>>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>>> ---
>>>>>> changelog:
>>>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>>>> v3: use local 'child_node' advised by Michael.
>>>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>>>> v1: add of_node_put() before each exit.
>>>>>>
>>>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>>>
>>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> index 98ae64075193..e4588943fe7e 100644
>>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>> {
>>>>>> enum of_gpio_flags flags;
>>>>>> struct device_node *node = pdev->dev.of_node;
>>>>>> + struct device_node *child_node;
>>>>>> int gpio, err, irq;
>>>>>> int trigger;
>>>>>>
>>>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>> return -ENODEV;
>>>>>>
>>>>>> /* If there's no matching child, this isn't really an error */
>>>>>> - halt_node = of_find_matching_node(node, child_match);
>>>>>> - if (!halt_node)
>>>>>> + child_node = of_find_matching_node(node, child_match);
>>>>>> + if (!child_node)
>>>>>> return 0;
>>>>>>
>>>>>> /* Technically we could just read the first one, but punish
>>>>>> * DT writers for invalid form. */
>>>>>> - if (of_gpio_count(halt_node) != 1)
>>>>>> - return -EINVAL;
>>>>>> + if (of_gpio_count(child_node) != 1) {
>>>>>> + err = -EINVAL;
>>>>>> + goto err_put;
>>>>>> + }
>>>>>>
>>>>>> /* Get the gpio number relative to the dynamic base. */
>>>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>>>> - if (!gpio_is_valid(gpio))
>>>>>> - return -EINVAL;
>>>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>>>> + if (!gpio_is_valid(gpio)) {
>>>>>> + err = -EINVAL;
>>>>>> + gotot err_put;
>>>>>
>>>>> Did you test the build ?
>>>>
>>>> Sorry for this fault.
>>>>
>>>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>>>
>>>> Now I am try using QEMU.
>>>>
>>>> Anyway, sorry for this fault.
>>>
>>> You can find cross compilers for most architectures for x86-64 here :
>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/
>>>
>>> Christophe
>>
>> Hi, Christophe and Conor.
>>
>> Sorry to trouble you again.
>>
>> Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
>>
>> For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
>> But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
>> there are still too many other errors.
>>
>> So if there is any efficient way to check my patch code to avoid 'gotot' error again.
>
>idk anything about powerpc, but what I find is a nice way to get a compiler
>for an arch I don't use is to search on lore.kernel.org for a 0day robot
>build error since it gives instructions for building on that arch.
>For example:
>https://lore.kernel.org/linuxppc-dev/202206060910.rYNTFqdI-lkp@intel.com/
>
>
>In this case, your bug seems obvious? You typed "gotot" instead of "goto".
>
>Hope that helps,
>Conor.
>
>>
>> Thanks again, Christophe and Conor.
>>
>> Liang
Thanks, Conor and Christophe.
I finally figure out an efficient way in which I can use cross-compiler to check my single patched file as follow:
powerpc64le-linux-gnu-gcc -Wp,-MMD,arch/powerpc/kernel/.io.o.d -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu11 -mcpu=powerpc -mcpu=powerpc -m32 -msoft-float -pipe -ffixed-r2 -mno-readonly-in-sdata -mno-altivec -mno-vsx -fno-asynchronous-unwind-tables -mno-string -mbig-endian -mstack-protector-guard=tls -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 --param=allow-store-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fomit-frame-pointer -fno-stack-clash-protection -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-alloc-size-larger-than -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard-offset=576 -Werror -DKBUILD_MODNAME='"85xx"' -DKBUILD_MODFILE='"arch/powerpc/platforms/85xx/sgy_cts1000.c"' -fsyntax-only ./arch/powerpc/platforms/85xx/sgy_cts1000.c
Thanks again.
Liang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 10:47 ` Liang He
@ 2022-06-17 10:57 ` Christophe Leroy
2022-06-17 11:46 ` Liang He
0 siblings, 1 reply; 10+ messages in thread
From: Christophe Leroy @ 2022-06-17 10:57 UTC (permalink / raw)
To: Liang He, Conor.Dooley@microchip.com
Cc: oss@buserror.net, mpe@ellerman.id.au, benh@kernel.crashing.org,
paulus@samba.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org
Le 17/06/2022 à 12:47, Liang He a écrit :
>
>
>
> At 2022-06-17 16:27:03, Conor.Dooley@microchip.com wrote:
>> On 17/06/2022 09:17, Liang He wrote:
>>>
>>>
>>>
>>> At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>
>>>>
>>>> Le 17/06/2022 à 08:45, Liang He a écrit :
>>>>>
>>>>>
>>>>>
>>>>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>>>
>>>>>>
>>>>>> Le 17/06/2022 à 08:08, 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
>>>>>>> fail path or when it is not used anymore.
>>>>>>>
>>>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>>>> ---
>>>>>>> changelog:
>>>>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>>>>> v3: use local 'child_node' advised by Michael.
>>>>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>>>>> v1: add of_node_put() before each exit.
>>>>>>>
>>>>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>>>>
>>>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>> index 98ae64075193..e4588943fe7e 100644
>>>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>>> {
>>>>>>> enum of_gpio_flags flags;
>>>>>>> struct device_node *node = pdev->dev.of_node;
>>>>>>> + struct device_node *child_node;
>>>>>>> int gpio, err, irq;
>>>>>>> int trigger;
>>>>>>>
>>>>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>>> return -ENODEV;
>>>>>>>
>>>>>>> /* If there's no matching child, this isn't really an error */
>>>>>>> - halt_node = of_find_matching_node(node, child_match);
>>>>>>> - if (!halt_node)
>>>>>>> + child_node = of_find_matching_node(node, child_match);
>>>>>>> + if (!child_node)
>>>>>>> return 0;
>>>>>>>
>>>>>>> /* Technically we could just read the first one, but punish
>>>>>>> * DT writers for invalid form. */
>>>>>>> - if (of_gpio_count(halt_node) != 1)
>>>>>>> - return -EINVAL;
>>>>>>> + if (of_gpio_count(child_node) != 1) {
>>>>>>> + err = -EINVAL;
>>>>>>> + goto err_put;
>>>>>>> + }
>>>>>>>
>>>>>>> /* Get the gpio number relative to the dynamic base. */
>>>>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>>>>> - if (!gpio_is_valid(gpio))
>>>>>>> - return -EINVAL;
>>>>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>>>>> + if (!gpio_is_valid(gpio)) {
>>>>>>> + err = -EINVAL;
>>>>>>> + gotot err_put;
>>>>>>
>>>>>> Did you test the build ?
>>>>>
>>>>> Sorry for this fault.
>>>>>
>>>>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>>>>
>>>>> Now I am try using QEMU.
>>>>>
>>>>> Anyway, sorry for this fault.
>>>>
>>>> You can find cross compilers for most architectures for x86-64 here :
>>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/
>>>>
>>>> Christophe
>>>
>>> Hi, Christophe and Conor.
>>>
>>> Sorry to trouble you again.
>>>
>>> Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
>>>
>>> For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
>>> But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
>>> there are still too many other errors.
>>>
>>> So if there is any efficient way to check my patch code to avoid 'gotot' error again.
>>
>> idk anything about powerpc, but what I find is a nice way to get a compiler
>> for an arch I don't use is to search on lore.kernel.org for a 0day robot
>> build error since it gives instructions for building on that arch.
>> For example:
>> https://lore.kernel.org/linuxppc-dev/202206060910.rYNTFqdI-lkp@intel.com/
>>
>>
>> In this case, your bug seems obvious? You typed "gotot" instead of "goto".
>>
>> Hope that helps,
>> Conor.
>>
>>>
>>> Thanks again, Christophe and Conor.
>>>
>>> Liang
>
> Thanks, Conor and Christophe.
>
> I finally figure out an efficient way in which I can use cross-compiler to check my single patched file as follow:
>
> powerpc64le-linux-gnu-gcc -Wp,-MMD,arch/powerpc/kernel/.io.o.d -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu11 -mcpu=powerpc -mcpu=powerpc -m32 -msoft-float -pipe -ffixed-r2 -mno-readonly-in-sdata -mno-altivec -mno-vsx -fno-asynchronous-unwind-tables -mno-string -mbig-endian -mstack-protector-guard=tls -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 --param=allow-store-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fomit-frame-pointer -fno-stack-clash-protection -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-alloc-size-larger-than -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard-offset=576 -Werror -DKBUILD_MODNAME='"85xx"' -DKBUILD_MODFILE='"arch/powerpc/platforms/85xx/sgy_cts1000.c"' -fsyntax-only ./arch/powerpc/platforms/85xx/sgy_cts1000.c
>
Easiest way is:
- Download cross compiler and extract it somewhere on your PC and ensure
it is in the PATH.
- Then:
run "make CROSS_COMPILE=powerpc64-linux-gnu ARCH=powerpc
corenet32_smp_defconfig"
modify .config to activate CONFIG_SGY_CTS1000
run "make CROSS_COMPILE=powerpc64-linux-gnu ARCH=powerpc
arch/powerpc/platforms/85xx/sgy_cts1000.o"
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re:Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
2022-06-17 10:57 ` Christophe Leroy
@ 2022-06-17 11:46 ` Liang He
0 siblings, 0 replies; 10+ messages in thread
From: Liang He @ 2022-06-17 11:46 UTC (permalink / raw)
To: Christophe Leroy
Cc: Conor.Dooley@microchip.com, oss@buserror.net, mpe@ellerman.id.au,
benh@kernel.crashing.org, paulus@samba.org,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
在 2022-06-17 18:57:36,"Christophe Leroy" <christophe.leroy@csgroup.eu> 写道:
>
>
>Le 17/06/2022 à 12:47, Liang He a écrit :
>>
>>
>>
>> At 2022-06-17 16:27:03, Conor.Dooley@microchip.com wrote:
>>> On 17/06/2022 09:17, Liang He wrote:
>>>>
>>>>
>>>>
>>>> At 2022-06-17 14:53:13, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>>
>>>>>
>>>>> Le 17/06/2022 à 08:45, Liang He a écrit :
>>>>>>
>>>>>>
>>>>>>
>>>>>> At 2022-06-17 14:28:56, "Christophe Leroy" <christophe.leroy@csgroup.eu> wrote:
>>>>>>>
>>>>>>>
>>>>>>> Le 17/06/2022 à 08:08, 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
>>>>>>>> fail path or when it is not used anymore.
>>>>>>>>
>>>>>>>> Signed-off-by: Liang He <windhl@126.com>
>>>>>>>> ---
>>>>>>>> changelog:
>>>>>>>> v4: reuse exist 'err' and use a simple code style, advised by CJ
>>>>>>>> v3: use local 'child_node' advised by Michael.
>>>>>>>> v2: use goto-label patch style advised by Christophe Leroy.
>>>>>>>> v1: add of_node_put() before each exit.
>>>>>>>>
>>>>>>>> arch/powerpc/platforms/85xx/sgy_cts1000.c | 35 ++++++++++++++---------
>>>>>>>> 1 file changed, 22 insertions(+), 13 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>>> index 98ae64075193..e4588943fe7e 100644
>>>>>>>> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>>> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
>>>>>>>> @@ -71,6 +71,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>>>> {
>>>>>>>> enum of_gpio_flags flags;
>>>>>>>> struct device_node *node = pdev->dev.of_node;
>>>>>>>> + struct device_node *child_node;
>>>>>>>> int gpio, err, irq;
>>>>>>>> int trigger;
>>>>>>>>
>>>>>>>> @@ -78,26 +79,29 @@ static int gpio_halt_probe(struct platform_device *pdev)
>>>>>>>> return -ENODEV;
>>>>>>>>
>>>>>>>> /* If there's no matching child, this isn't really an error */
>>>>>>>> - halt_node = of_find_matching_node(node, child_match);
>>>>>>>> - if (!halt_node)
>>>>>>>> + child_node = of_find_matching_node(node, child_match);
>>>>>>>> + if (!child_node)
>>>>>>>> return 0;
>>>>>>>>
>>>>>>>> /* Technically we could just read the first one, but punish
>>>>>>>> * DT writers for invalid form. */
>>>>>>>> - if (of_gpio_count(halt_node) != 1)
>>>>>>>> - return -EINVAL;
>>>>>>>> + if (of_gpio_count(child_node) != 1) {
>>>>>>>> + err = -EINVAL;
>>>>>>>> + goto err_put;
>>>>>>>> + }
>>>>>>>>
>>>>>>>> /* Get the gpio number relative to the dynamic base. */
>>>>>>>> - gpio = of_get_gpio_flags(halt_node, 0, &flags);
>>>>>>>> - if (!gpio_is_valid(gpio))
>>>>>>>> - return -EINVAL;
>>>>>>>> + gpio = of_get_gpio_flags(child_node, 0, &flags);
>>>>>>>> + if (!gpio_is_valid(gpio)) {
>>>>>>>> + err = -EINVAL;
>>>>>>>> + gotot err_put;
>>>>>>>
>>>>>>> Did you test the build ?
>>>>>>
>>>>>> Sorry for this fault.
>>>>>>
>>>>>> In fact, I am still finding an efficient way to building different arch source code as I only have x86-64.
>>>>>>
>>>>>> Now I am try using QEMU.
>>>>>>
>>>>>> Anyway, sorry for this fault.
>>>>>
>>>>> You can find cross compilers for most architectures for x86-64 here :
>>>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/
>>>>>
>>>>> Christophe
>>>>
>>>> Hi, Christophe and Conor.
>>>>
>>>> Sorry to trouble you again.
>>>>
>>>> Now I only know how to quickly identify the refcounting bugs, but I cannot efficiently give a build test.
>>>>
>>>> For example, I use the cross compilers 'powerpc-linux-gnu-gcc' to compile 'arch/powerpc/platforms/85xx/sgy_cts1000.c' with -fsyntax-only flag.
>>>> But I meet too many header file missing errors. Even if I add some 'include' pathes, e.g., ./arch/powerpc/include, ./include,
>>>> there are still too many other errors.
>>>>
>>>> So if there is any efficient way to check my patch code to avoid 'gotot' error again.
>>>
>>> idk anything about powerpc, but what I find is a nice way to get a compiler
>>> for an arch I don't use is to search on lore.kernel.org for a 0day robot
>>> build error since it gives instructions for building on that arch.
>>> For example:
>>> https://lore.kernel.org/linuxppc-dev/202206060910.rYNTFqdI-lkp@intel.com/
>>>
>>>
>>> In this case, your bug seems obvious? You typed "gotot" instead of "goto".
>>>
>>> Hope that helps,
>>> Conor.
>>>
>>>>
>>>> Thanks again, Christophe and Conor.
>>>>
>>>> Liang
>>
>> Thanks, Conor and Christophe.
>>
>> I finally figure out an efficient way in which I can use cross-compiler to check my single patched file as follow:
>>
>> powerpc64le-linux-gnu-gcc -Wp,-MMD,arch/powerpc/kernel/.io.o.d -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu11 -mcpu=powerpc -mcpu=powerpc -m32 -msoft-float -pipe -ffixed-r2 -mno-readonly-in-sdata -mno-altivec -mno-vsx -fno-asynchronous-unwind-tables -mno-string -mbig-endian -mstack-protector-guard=tls -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 --param=allow-store-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fomit-frame-pointer -fno-stack-clash-protection -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-alloc-size-larger-than -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard-offset=576 -Werror -DKBUILD_MODNAME='"85xx"' -DKBUILD_MODFILE='"arch/powerpc/platforms/85xx/sgy_cts1000.c"' -fsyntax-only ./arch/powerpc/platforms/85xx/sgy_cts1000.c
>>
>
>Easiest way is:
>- Download cross compiler and extract it somewhere on your PC and ensure
>it is in the PATH.
>- Then:
>
>run "make CROSS_COMPILE=powerpc64-linux-gnu ARCH=powerpc
>corenet32_smp_defconfig"
>
>modify .config to activate CONFIG_SGY_CTS1000
>
>run "make CROSS_COMPILE=powerpc64-linux-gnu ARCH=powerpc
>arch/powerpc/platforms/85xx/sgy_cts1000.o"
>
Thanks for your valuable experience, Christophe.
It is great and I have used it to successfully compile my patched code without
any error:
"
CC arch/powerpc/platforms/85xx/sgy_cts1000.o
"
BYW, it should be 'make CROSS_COMPILE=powerpc64-linux-gnu- ...'
Thanks again!
Liang
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-06-17 11:50 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-17 6:08 [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000 Liang He
2022-06-17 6:28 ` Christophe Leroy
2022-06-17 6:45 ` Liang He
2022-06-17 6:53 ` Christophe Leroy
2022-06-17 8:17 ` Liang He
2022-06-17 8:27 ` Conor.Dooley
2022-06-17 8:34 ` Liang He
2022-06-17 10:47 ` Liang He
2022-06-17 10:57 ` Christophe Leroy
2022-06-17 11:46 ` Liang He
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox