diff mbox series

regulator: add missing call to of_node_put()

Message ID 1614244046-57560-1-git-send-email-yang.lee@linux.alibaba.com (mailing list archive)
State New, archived
Headers show
Series regulator: add missing call to of_node_put() | expand

Commit Message

Yang Li Feb. 25, 2021, 9:07 a.m. UTC
In one of the error paths of the for_each_child_of_node() loop,
add missing call to of_node_put().

Fix the following coccicheck warning:
./drivers/regulator/scmi-regulator.c:343:1-23: WARNING: Function
"for_each_child_of_node" should have of_node_put() before return around
line 347.

Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Yang Li <yang.lee@linux.alibaba.com>
---
 drivers/regulator/scmi-regulator.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Cristian Marussi Feb. 25, 2021, 12:04 p.m. UTC | #1
Hi,

thanks for reporting this, you're right but you've missed the braces
around the if block in your patch, because we really want to exit
only on -ENOMEM. Something like:

  	if (ret == -ENOMEM) {
		of_node_put(child);
		return ret;
	}

Regards,

Cristian

On Thu, Feb 25, 2021 at 05:07:26PM +0800, Yang Li wrote:
> In one of the error paths of the for_each_child_of_node() loop,
> add missing call to of_node_put().
> 
> Fix the following coccicheck warning:
> ./drivers/regulator/scmi-regulator.c:343:1-23: WARNING: Function
> "for_each_child_of_node" should have of_node_put() before return around
> line 347.
> 
> Reported-by: Abaci Robot <abaci@linux.alibaba.com>
> Signed-off-by: Yang Li <yang.lee@linux.alibaba.com>
> ---
>  drivers/regulator/scmi-regulator.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/regulator/scmi-regulator.c b/drivers/regulator/scmi-regulator.c
> index 0e8b3ca..a41bb06 100644
> --- a/drivers/regulator/scmi-regulator.c
> +++ b/drivers/regulator/scmi-regulator.c
> @@ -344,6 +344,7 @@ static int scmi_regulator_probe(struct scmi_device *sdev)
>  		ret = process_scmi_regulator_of_node(sdev, child, rinfo);
>  		/* abort on any mem issue */
>  		if (ret == -ENOMEM)
> +			of_node_put(child);
>  			return ret;
>  	}
>  
> -- 
> 1.8.3.1
>
kernel test robot Feb. 25, 2021, 1:17 p.m. UTC | #2
Hi Yang,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on regulator/for-next]
[also build test WARNING on v5.11 next-20210225]
[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/0day-ci/linux/commits/Yang-Li/regulator-add-missing-call-to-of_node_put/20210225-171554
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next
config: x86_64-randconfig-a002-20210225 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project a921aaf789912d981cbb2036bdc91ad7289e1523)
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
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://github.com/0day-ci/linux/commit/1e86ace1b41a7e1cd7f89e0ceba95768d4e5760a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Yang-Li/regulator-add-missing-call-to-of_node_put/20210225-171554
        git checkout 1e86ace1b41a7e1cd7f89e0ceba95768d4e5760a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

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

All warnings (new ones prefixed by >>):

>> drivers/regulator/scmi-regulator.c:348:4: warning: misleading indentation; statement is not part of the previous 'if' [-Wmisleading-indentation]
                           return ret;
                           ^
   drivers/regulator/scmi-regulator.c:346:3: note: previous statement is here
                   if (ret == -ENOMEM)
                   ^
   1 warning generated.


vim +/if +348 drivers/regulator/scmi-regulator.c

0fbeae70ee7ce9 Cristian Marussi 2020-11-23  298  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  299  static int scmi_regulator_probe(struct scmi_device *sdev)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  300  {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  301  	int d, ret, num_doms;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  302  	struct device_node *np, *child;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  303  	const struct scmi_handle *handle = sdev->handle;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  304  	struct scmi_regulator_info *rinfo;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  305  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  306  	if (!handle || !handle->voltage_ops)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  307  		return -ENODEV;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  308  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  309  	num_doms = handle->voltage_ops->num_domains_get(handle);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  310  	if (num_doms <= 0) {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  311  		if (!num_doms) {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  312  			dev_err(&sdev->dev,
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  313  				"number of voltage domains invalid\n");
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  314  			num_doms = -EINVAL;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  315  		} else {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  316  			dev_err(&sdev->dev,
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  317  				"failed to get voltage domains - err:%d\n",
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  318  				num_doms);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  319  		}
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  320  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  321  		return num_doms;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  322  	}
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  323  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  324  	rinfo = devm_kzalloc(&sdev->dev, sizeof(*rinfo), GFP_KERNEL);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  325  	if (!rinfo)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  326  		return -ENOMEM;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  327  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  328  	/* Allocate pointers array for all possible domains */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  329  	rinfo->sregv = devm_kcalloc(&sdev->dev, num_doms,
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  330  				    sizeof(void *), GFP_KERNEL);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  331  	if (!rinfo->sregv)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  332  		return -ENOMEM;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  333  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  334  	rinfo->num_doms = num_doms;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  335  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  336  	/*
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  337  	 * Start collecting into rinfo->sregv possibly good SCMI Regulators as
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  338  	 * described by a well-formed DT entry and associated with an existing
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  339  	 * plausible SCMI Voltage Domain number, all belonging to this SCMI
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  340  	 * platform instance node (handle->dev->of_node).
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  341  	 */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  342  	np = of_find_node_by_name(handle->dev->of_node, "regulators");
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  343  	for_each_child_of_node(np, child) {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  344  		ret = process_scmi_regulator_of_node(sdev, child, rinfo);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  345  		/* abort on any mem issue */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  346  		if (ret == -ENOMEM)
1e86ace1b41a7e Yang Li          2021-02-25  347  			of_node_put(child);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23 @348  			return ret;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  349  	}
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  350  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  351  	/*
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  352  	 * Register a regulator for each valid regulator-DT-entry that we
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  353  	 * can successfully reach via SCMI and has a valid associated voltage
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  354  	 * domain.
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  355  	 */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  356  	for (d = 0; d < num_doms; d++) {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  357  		struct scmi_regulator *sreg = rinfo->sregv[d];
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  358  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  359  		/* Skip empty slots */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  360  		if (!sreg)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  361  			continue;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  362  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  363  		ret = scmi_regulator_common_init(sreg);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  364  		/* Skip invalid voltage domains */
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  365  		if (ret)
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  366  			continue;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  367  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  368  		sreg->rdev = devm_regulator_register(&sdev->dev, &sreg->desc,
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  369  						     &sreg->conf);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  370  		if (IS_ERR(sreg->rdev)) {
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  371  			sreg->rdev = NULL;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  372  			continue;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  373  		}
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  374  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  375  		dev_info(&sdev->dev,
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  376  			 "Regulator %s registered for domain [%d]\n",
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  377  			 sreg->desc.name, sreg->id);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  378  	}
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  379  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  380  	dev_set_drvdata(&sdev->dev, rinfo);
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  381  
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  382  	return 0;
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  383  }
0fbeae70ee7ce9 Cristian Marussi 2020-11-23  384  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot Feb. 25, 2021, 1:39 p.m. UTC | #3
Hi Yang,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on regulator/for-next]
[also build test WARNING on v5.11 next-20210225]
[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/0day-ci/linux/commits/Yang-Li/regulator-add-missing-call-to-of_node_put/20210225-171554
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next
config: riscv-allmodconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.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/0day-ci/linux/commit/1e86ace1b41a7e1cd7f89e0ceba95768d4e5760a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Yang-Li/regulator-add-missing-call-to-of_node_put/20210225-171554
        git checkout 1e86ace1b41a7e1cd7f89e0ceba95768d4e5760a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=riscv 

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

All warnings (new ones prefixed by >>):

   drivers/regulator/scmi-regulator.c: In function 'scmi_regulator_probe':
>> drivers/regulator/scmi-regulator.c:346:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
     346 |   if (ret == -ENOMEM)
         |   ^~
   drivers/regulator/scmi-regulator.c:348:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
     348 |    return ret;
         |    ^~~~~~


vim +/if +346 drivers/regulator/scmi-regulator.c

0fbeae70ee7ce98e Cristian Marussi 2020-11-23  298  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  299  static int scmi_regulator_probe(struct scmi_device *sdev)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  300  {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  301  	int d, ret, num_doms;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  302  	struct device_node *np, *child;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  303  	const struct scmi_handle *handle = sdev->handle;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  304  	struct scmi_regulator_info *rinfo;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  305  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  306  	if (!handle || !handle->voltage_ops)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  307  		return -ENODEV;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  308  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  309  	num_doms = handle->voltage_ops->num_domains_get(handle);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  310  	if (num_doms <= 0) {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  311  		if (!num_doms) {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  312  			dev_err(&sdev->dev,
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  313  				"number of voltage domains invalid\n");
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  314  			num_doms = -EINVAL;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  315  		} else {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  316  			dev_err(&sdev->dev,
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  317  				"failed to get voltage domains - err:%d\n",
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  318  				num_doms);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  319  		}
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  320  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  321  		return num_doms;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  322  	}
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  323  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  324  	rinfo = devm_kzalloc(&sdev->dev, sizeof(*rinfo), GFP_KERNEL);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  325  	if (!rinfo)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  326  		return -ENOMEM;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  327  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  328  	/* Allocate pointers array for all possible domains */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  329  	rinfo->sregv = devm_kcalloc(&sdev->dev, num_doms,
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  330  				    sizeof(void *), GFP_KERNEL);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  331  	if (!rinfo->sregv)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  332  		return -ENOMEM;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  333  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  334  	rinfo->num_doms = num_doms;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  335  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  336  	/*
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  337  	 * Start collecting into rinfo->sregv possibly good SCMI Regulators as
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  338  	 * described by a well-formed DT entry and associated with an existing
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  339  	 * plausible SCMI Voltage Domain number, all belonging to this SCMI
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  340  	 * platform instance node (handle->dev->of_node).
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  341  	 */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  342  	np = of_find_node_by_name(handle->dev->of_node, "regulators");
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  343  	for_each_child_of_node(np, child) {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  344  		ret = process_scmi_regulator_of_node(sdev, child, rinfo);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  345  		/* abort on any mem issue */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23 @346  		if (ret == -ENOMEM)
1e86ace1b41a7e1c Yang Li          2021-02-25  347  			of_node_put(child);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  348  			return ret;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  349  	}
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  350  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  351  	/*
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  352  	 * Register a regulator for each valid regulator-DT-entry that we
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  353  	 * can successfully reach via SCMI and has a valid associated voltage
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  354  	 * domain.
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  355  	 */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  356  	for (d = 0; d < num_doms; d++) {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  357  		struct scmi_regulator *sreg = rinfo->sregv[d];
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  358  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  359  		/* Skip empty slots */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  360  		if (!sreg)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  361  			continue;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  362  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  363  		ret = scmi_regulator_common_init(sreg);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  364  		/* Skip invalid voltage domains */
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  365  		if (ret)
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  366  			continue;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  367  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  368  		sreg->rdev = devm_regulator_register(&sdev->dev, &sreg->desc,
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  369  						     &sreg->conf);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  370  		if (IS_ERR(sreg->rdev)) {
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  371  			sreg->rdev = NULL;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  372  			continue;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  373  		}
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  374  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  375  		dev_info(&sdev->dev,
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  376  			 "Regulator %s registered for domain [%d]\n",
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  377  			 sreg->desc.name, sreg->id);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  378  	}
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  379  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  380  	dev_set_drvdata(&sdev->dev, rinfo);
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  381  
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  382  	return 0;
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  383  }
0fbeae70ee7ce98e Cristian Marussi 2020-11-23  384  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/regulator/scmi-regulator.c b/drivers/regulator/scmi-regulator.c
index 0e8b3ca..a41bb06 100644
--- a/drivers/regulator/scmi-regulator.c
+++ b/drivers/regulator/scmi-regulator.c
@@ -344,6 +344,7 @@  static int scmi_regulator_probe(struct scmi_device *sdev)
 		ret = process_scmi_regulator_of_node(sdev, child, rinfo);
 		/* abort on any mem issue */
 		if (ret == -ENOMEM)
+			of_node_put(child);
 			return ret;
 	}