diff mbox series

drivers: soc: sifive: Add missing of_node_put() in sifive_l2_cache.c

Message ID 20220615122315.3965435-1-windhl@126.com (mailing list archive)
State New, archived
Headers show
Series drivers: soc: sifive: Add missing of_node_put() in sifive_l2_cache.c | expand

Commit Message

Liang He June 15, 2022, 12:23 p.m. UTC
In sifive_l2_init(), 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>
---
 drivers/soc/sifive/sifive_l2_cache.c | 29 ++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

Comments

kernel test robot June 15, 2022, 9:58 p.m. UTC | #1
Hi Liang,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.19-rc2 next-20220615]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Liang-He/drivers-soc-sifive-Add-missing-of_node_put-in-sifive_l2_cache-c/20220615-202528
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 018ab4fabddd94f1c96f3b59e180691b9e88d5d8
config: riscv-allyesconfig (https://download.01.org/0day-ci/archive/20220616/202206160559.fVKJx0ST-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/49c4086768b5aff410a4a19ca740f8ae8e211844
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Liang-He/drivers-soc-sifive-Add-missing-of_node_put-in-sifive_l2_cache-c/20220615-202528
        git checkout 49c4086768b5aff410a4a19ca740f8ae8e211844
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash drivers/soc/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/soc/sifive/sifive_l2_cache.c: In function 'sifive_l2_init':
>> drivers/soc/sifive/sifive_l2_cache.c:224:17: error: expected ';' before 'goto'
     224 |                 goto out_put;
         |                 ^~~~


vim +224 drivers/soc/sifive/sifive_l2_cache.c

   194	
   195	static int __init sifive_l2_init(void)
   196	{
   197		struct device_node *np;
   198		struct resource res;
   199		int i, rc, intr_num;
   200	
   201		int ret;
   202	
   203		np = of_find_matching_node(NULL, sifive_l2_ids);
   204		if (!np)
   205			return -ENODEV;
   206	
   207		if (of_address_to_resource(np, 0, &res))
   208		{
   209			ret = -ENODEV;
   210			goto out_put;
   211		}
   212	
   213		l2_base = ioremap(res.start, resource_size(&res));
   214		if (!l2_base)
   215		{
   216			ret = -ENOMEM;
   217			goto out_put;
   218		}
   219	
   220		intr_num = of_property_count_u32_elems(np, "interrupts");
   221		if (!intr_num) {		
   222			pr_err("L2CACHE: no interrupts property\n");
   223			ret = -ENODEV
 > 224			goto out_put;
   225		}
   226	
   227		for (i = 0; i < intr_num; i++) {
   228			g_irq[i] = irq_of_parse_and_map(np, i);
   229			rc = request_irq(g_irq[i], l2_int_handler, 0, "l2_ecc", NULL);
   230			
   231			if (rc) {
   232				
   233				pr_err("L2CACHE: Could not request IRQ %d\n", g_irq[i]);
   234				ret = rc;
   235				goto out_put;
   236			}
   237		}
   238	
   239		l2_config_read();
   240	
   241		l2_cache_ops.get_priv_group = l2_get_priv_group;
   242		riscv_set_cacheinfo_ops(&l2_cache_ops);
   243
Liang He June 16, 2022, 4:54 a.m. UTC | #2
At 2022-06-16 05:58:05, "kernel test robot" <lkp@intel.com> wrote:
>Hi Liang,
>
>Thank you for the patch! Yet something to improve:
>
>[auto build test ERROR on linus/master]
>[also build test ERROR on v5.19-rc2 next-20220615]
>[If your patch is applied to the wrong git tree, kindly drop us a note.
>And when submitting patch, we suggest to use '--base' as documented in
>https://git-scm.com/docs/git-format-patch]
>

When I use --base, there are too many prerequests-patch-id caused by my local commits. 
I don't know if it will cause other troubles. So I resent a new patch still without this '--base'.
Is it Ok?

Sorry, I forget to say in new patch that  is based on v5.19-rc2 mainline git repo.

>url:    https://github.com/intel-lab-lkp/linux/commits/Liang-He/drivers-soc-sifive-Add-missing-of_node_put-in-sifive_l2_cache-c/20220615-202528
>base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 018ab4fabddd94f1c96f3b59e180691b9e88d5d8
>config: riscv-allyesconfig (https://download.01.org/0day-ci/archive/20220616/202206160559.fVKJx0ST-lkp@intel.com/config)
>compiler: riscv64-linux-gcc (GCC) 11.3.0
>reproduce (this is a W=1 build):
>        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>        chmod +x ~/bin/make.cross
>        # https://github.com/intel-lab-lkp/linux/commit/49c4086768b5aff410a4a19ca740f8ae8e211844
>        git remote add linux-review https://github.com/intel-lab-lkp/linux
>        git fetch --no-tags linux-review Liang-He/drivers-soc-sifive-Add-missing-of_node_put-in-sifive_l2_cache-c/20220615-202528
>        git checkout 49c4086768b5aff410a4a19ca740f8ae8e211844
>        # save the config file
>        mkdir build_dir && cp config build_dir/.config
>        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash drivers/soc/
>
>If you fix the issue, kindly add following tag where applicable
>Reported-by: kernel test robot <lkp@intel.com>
>

Thanks for this report, now I make a new patch and add "Reported-by: kernel test robot <lkp@intel.com>"


>All errors (new ones prefixed by >>):
>
>   drivers/soc/sifive/sifive_l2_cache.c: In function 'sifive_l2_init':
>>> drivers/soc/sifive/sifive_l2_cache.c:224:17: error: expected ';' before 'goto'
>     224 |                 goto out_put;
>         |                 ^~~~
>
>

Thanks for all your effort to improve the patch.
Christophe JAILLET June 16, 2022, 5:12 a.m. UTC | #3
Le 15/06/2022 à 14:23, Liang He a écrit :
> In sifive_l2_init(), 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>
> ---
>   drivers/soc/sifive/sifive_l2_cache.c | 29 ++++++++++++++++++++++------
>   1 file changed, 23 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/soc/sifive/sifive_l2_cache.c b/drivers/soc/sifive/sifive_l2_cache.c
> index 59640a1d0b28..2b9c9522ef21 100644
> --- a/drivers/soc/sifive/sifive_l2_cache.c
> +++ b/drivers/soc/sifive/sifive_l2_cache.c
> @@ -198,29 +198,41 @@ static int __init sifive_l2_init(void)
>   	struct resource res;
>   	int i, rc, intr_num;
>   

Hi,
this empty line is not needed.

> +	int ret;
> +
>   	np = of_find_matching_node(NULL, sifive_l2_ids);
>   	if (!np)
>   		return -ENODEV;
>   
>   	if (of_address_to_resource(np, 0, &res))
> -		return -ENODEV;
> +	{

this should be at the end of the previous line.

> +		ret = -ENODEV;
> +		goto out_put;
> +	}
>   
>   	l2_base = ioremap(res.start, resource_size(&res));
>   	if (!l2_base)
> -		return -ENOMEM;
> +	{
>

Same here.

  +		ret = -ENOMEM;
> +		goto out_put;
> +	}
>   
>   	intr_num = of_property_count_u32_elems(np, "interrupts");
> -	if (!intr_num) {
> +	if (!intr_num) {		
>   		pr_err("L2CACHE: no interrupts property\n");
> -		return -ENODEV;
> +		ret = -ENODEV

Missing ";" as reported by the bot.

> +		goto out_put;
>   	}
>   
>   	for (i = 0; i < intr_num; i++) {
>   		g_irq[i] = irq_of_parse_and_map(np, i);
>   		rc = request_irq(g_irq[i], l2_int_handler, 0, "l2_ecc", NULL);
> +		
>   		if (rc) {
> +			

Why a new empty line here?

>   			pr_err("L2CACHE: Could not request IRQ %d\n", g_irq[i]);
> -			return rc;
> +			ret = rc;
> +			goto out_put;
>   		}
>   	}
>   
> @@ -232,6 +244,11 @@ static int __init sifive_l2_init(void)
>   #ifdef CONFIG_DEBUG_FS
>   	setup_sifive_debug();
>   #endif
> -	return 0;
> +	ret = 0;
> +	
> +	

No need for 2 empty lines here.


There are also some trailing white spaces on some lines.

"./scripts/checkpatch <name_of_the_patch>" catches some of these tiny 
issues. Using --strict catches even more of these issues.

You should also always at least compile test your patches, even if they 
look obvious,

CJ


> +out_put:
> +	of_node_put(np);
> +	return ret;
>   }
>   device_initcall(sifive_l2_init);
Liang He June 16, 2022, 5:33 a.m. UTC | #4
At 2022-06-16 13:12:21, "Christophe JAILLET" <christophe.jaillet@wanadoo.fr> wrote:
>Le 15/06/2022 à 14:23, Liang He a écrit :
>> In sifive_l2_init(), 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>
>> ---
>>   drivers/soc/sifive/sifive_l2_cache.c | 29 ++++++++++++++++++++++------
>>   1 file changed, 23 insertions(+), 6 deletions(-)
>> 
>> diff --git a/drivers/soc/sifive/sifive_l2_cache.c b/drivers/soc/sifive/sifive_l2_cache.c
>> index 59640a1d0b28..2b9c9522ef21 100644
>> --- a/drivers/soc/sifive/sifive_l2_cache.c
>> +++ b/drivers/soc/sifive/sifive_l2_cache.c
>> @@ -198,29 +198,41 @@ static int __init sifive_l2_init(void)
>>   	struct resource res;
>>   	int i, rc, intr_num;
>>   
>
>Hi,
>this empty line is not needed.
>
>> +	int ret;
>> +
>>   	np = of_find_matching_node(NULL, sifive_l2_ids);
>>   	if (!np)
>>   		return -ENODEV;
>>   
>>   	if (of_address_to_resource(np, 0, &res))
>> -		return -ENODEV;
>> +	{
>
>this should be at the end of the previous line.
>
>> +		ret = -ENODEV;
>> +		goto out_put;
>> +	}
>>   
>>   	l2_base = ioremap(res.start, resource_size(&res));
>>   	if (!l2_base)
>> -		return -ENOMEM;
>> +	{
>>
>
>Same here.
>
>  +		ret = -ENOMEM;
>> +		goto out_put;
>> +	}
>>   
>>   	intr_num = of_property_count_u32_elems(np, "interrupts");
>> -	if (!intr_num) {
>> +	if (!intr_num) {		
>>   		pr_err("L2CACHE: no interrupts property\n");
>> -		return -ENODEV;
>> +		ret = -ENODEV
>
>Missing ";" as reported by the bot.
>
>> +		goto out_put;
>>   	}
>>   
>>   	for (i = 0; i < intr_num; i++) {
>>   		g_irq[i] = irq_of_parse_and_map(np, i);
>>   		rc = request_irq(g_irq[i], l2_int_handler, 0, "l2_ecc", NULL);
>> +		
>>   		if (rc) {
>> +			
>
>Why a new empty line here?
>
>>   			pr_err("L2CACHE: Could not request IRQ %d\n", g_irq[i]);
>> -			return rc;
>> +			ret = rc;
>> +			goto out_put;
>>   		}
>>   	}
>>   
>> @@ -232,6 +244,11 @@ static int __init sifive_l2_init(void)
>>   #ifdef CONFIG_DEBUG_FS
>>   	setup_sifive_debug();
>>   #endif
>> -	return 0;
>> +	ret = 0;
>> +	
>> +	
>
>No need for 2 empty lines here.
>
>
>There are also some trailing white spaces on some lines.
>
>"./scripts/checkpatch <name_of_the_patch>" catches some of these tiny 
>issues. Using --strict catches even more of these issues.
>
>You should also always at least compile test your patches, even if they 
>look obvious,
>
>CJ
>
>
>> +out_put:
>> +	of_node_put(np);
>> +	return ret;
>>   }
>>   device_initcall(sifive_l2_init);


Sorry for my troubles. I will check my patch more carefully.
Christophe JAILLET June 16, 2022, 6:45 p.m. UTC | #5
Le 16/06/2022 à 07:33, Liang He a écrit :

> 
> Sorry for my troubles. I will check my patch more carefully.

No problem, you seem to be knew on the lists so you have to learn the 
tricks, coding-style, tools...

Happy patching :)

CJ
diff mbox series

Patch

diff --git a/drivers/soc/sifive/sifive_l2_cache.c b/drivers/soc/sifive/sifive_l2_cache.c
index 59640a1d0b28..2b9c9522ef21 100644
--- a/drivers/soc/sifive/sifive_l2_cache.c
+++ b/drivers/soc/sifive/sifive_l2_cache.c
@@ -198,29 +198,41 @@  static int __init sifive_l2_init(void)
 	struct resource res;
 	int i, rc, intr_num;
 
+	int ret;
+
 	np = of_find_matching_node(NULL, sifive_l2_ids);
 	if (!np)
 		return -ENODEV;
 
 	if (of_address_to_resource(np, 0, &res))
-		return -ENODEV;
+	{
+		ret = -ENODEV;
+		goto out_put;
+	}
 
 	l2_base = ioremap(res.start, resource_size(&res));
 	if (!l2_base)
-		return -ENOMEM;
+	{
+		ret = -ENOMEM;
+		goto out_put;
+	}
 
 	intr_num = of_property_count_u32_elems(np, "interrupts");
-	if (!intr_num) {
+	if (!intr_num) {		
 		pr_err("L2CACHE: no interrupts property\n");
-		return -ENODEV;
+		ret = -ENODEV
+		goto out_put;
 	}
 
 	for (i = 0; i < intr_num; i++) {
 		g_irq[i] = irq_of_parse_and_map(np, i);
 		rc = request_irq(g_irq[i], l2_int_handler, 0, "l2_ecc", NULL);
+		
 		if (rc) {
+			
 			pr_err("L2CACHE: Could not request IRQ %d\n", g_irq[i]);
-			return rc;
+			ret = rc;
+			goto out_put;
 		}
 	}
 
@@ -232,6 +244,11 @@  static int __init sifive_l2_init(void)
 #ifdef CONFIG_DEBUG_FS
 	setup_sifive_debug();
 #endif
-	return 0;
+	ret = 0;
+	
+	
+out_put:
+	of_node_put(np);
+	return ret;
 }
 device_initcall(sifive_l2_init);