From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Liang He <windhl@126.com>,
"Conor.Dooley@microchip.com" <Conor.Dooley@microchip.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"oss@buserror.net" <oss@buserror.net>,
"paulus@samba.org" <paulus@samba.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v4] powerpc:85xx: Add missing of_node_put() in sgy_cst1000
Date: Fri, 17 Jun 2022 10:57:36 +0000 [thread overview]
Message-ID: <f93ef357-3336-fdc0-55e9-b09beeb2da72@csgroup.eu> (raw)
In-Reply-To: <71b517f4.7854.1817145ff77.Coremail.windhl@126.com>
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"
next prev parent reply other threads:[~2022-06-17 10:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2022-06-17 11:46 ` 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=f93ef357-3336-fdc0-55e9-b09beeb2da72@csgroup.eu \
--to=christophe.leroy@csgroup.eu \
--cc=Conor.Dooley@microchip.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=oss@buserror.net \
--cc=paulus@samba.org \
--cc=windhl@126.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox