All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)
Date: Mon, 11 Jul 2022 09:31:53 +0800	[thread overview]
Message-ID: <202207110939.SC3SbyPy-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 7902 bytes --]

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: Johnson Wang <johnson.wang@mediatek.com>
CC: Chanwoo Choi <cw00.choi@samsung.com>
CC: "Jia-Wei Chang" <jia-wei.chang@mediatek.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   f2528c29385819a84480cacef4886b049761e2c5
commit: b615b00c42da1ea59aefbd6c98b08b1afabb9d1e [5859/8914] PM / devfreq: mediatek: Introduce MediaTek CCI devfreq driver
:::::: branch date: 3 days ago
:::::: commit date: 11 days ago
config: microblaze-randconfig-m031-20220706 (https://download.01.org/0day-ci/archive/20220711/202207110939.SC3SbyPy-lkp(a)intel.com/config)
compiler: microblaze-linux-gcc (GCC) 11.3.0

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

smatch warnings:
drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)

vim +/drv +135 drivers/devfreq/mtk-cci-devfreq.c

b615b00c42da1e Johnson Wang 2022-06-07  125  
b615b00c42da1e Johnson Wang 2022-06-07  126  static int mtk_ccifreq_target(struct device *dev, unsigned long *freq,
b615b00c42da1e Johnson Wang 2022-06-07  127  			      u32 flags)
b615b00c42da1e Johnson Wang 2022-06-07  128  {
b615b00c42da1e Johnson Wang 2022-06-07  129  	struct mtk_ccifreq_drv *drv = dev_get_drvdata(dev);
b615b00c42da1e Johnson Wang 2022-06-07 @130  	struct clk *cci_pll = clk_get_parent(drv->cci_clk);
b615b00c42da1e Johnson Wang 2022-06-07  131  	struct dev_pm_opp *opp;
b615b00c42da1e Johnson Wang 2022-06-07  132  	unsigned long opp_rate;
b615b00c42da1e Johnson Wang 2022-06-07  133  	int voltage, pre_voltage, inter_voltage, target_voltage, ret;
b615b00c42da1e Johnson Wang 2022-06-07  134  
b615b00c42da1e Johnson Wang 2022-06-07 @135  	if (!drv)
b615b00c42da1e Johnson Wang 2022-06-07  136  		return -EINVAL;
b615b00c42da1e Johnson Wang 2022-06-07  137  
b615b00c42da1e Johnson Wang 2022-06-07  138  	if (drv->pre_freq == *freq)
b615b00c42da1e Johnson Wang 2022-06-07  139  		return 0;
b615b00c42da1e Johnson Wang 2022-06-07  140  
b615b00c42da1e Johnson Wang 2022-06-07  141  	inter_voltage = drv->inter_voltage;
b615b00c42da1e Johnson Wang 2022-06-07  142  
b615b00c42da1e Johnson Wang 2022-06-07  143  	opp_rate = *freq;
b615b00c42da1e Johnson Wang 2022-06-07  144  	opp = devfreq_recommended_opp(dev, &opp_rate, 1);
b615b00c42da1e Johnson Wang 2022-06-07  145  	if (IS_ERR(opp)) {
b615b00c42da1e Johnson Wang 2022-06-07  146  		dev_err(dev, "failed to find opp for freq: %ld\n", opp_rate);
b615b00c42da1e Johnson Wang 2022-06-07  147  		return PTR_ERR(opp);
b615b00c42da1e Johnson Wang 2022-06-07  148  	}
b615b00c42da1e Johnson Wang 2022-06-07  149  
b615b00c42da1e Johnson Wang 2022-06-07  150  	mutex_lock(&drv->reg_lock);
b615b00c42da1e Johnson Wang 2022-06-07  151  
b615b00c42da1e Johnson Wang 2022-06-07  152  	voltage = dev_pm_opp_get_voltage(opp);
b615b00c42da1e Johnson Wang 2022-06-07  153  	dev_pm_opp_put(opp);
b615b00c42da1e Johnson Wang 2022-06-07  154  
b615b00c42da1e Johnson Wang 2022-06-07  155  	pre_voltage = regulator_get_voltage(drv->proc_reg);
b615b00c42da1e Johnson Wang 2022-06-07  156  	if (pre_voltage < 0) {
b615b00c42da1e Johnson Wang 2022-06-07  157  		dev_err(dev, "invalid vproc value: %d\n", pre_voltage);
b615b00c42da1e Johnson Wang 2022-06-07  158  		ret = pre_voltage;
b615b00c42da1e Johnson Wang 2022-06-07  159  		goto out_unlock;
b615b00c42da1e Johnson Wang 2022-06-07  160  	}
b615b00c42da1e Johnson Wang 2022-06-07  161  
b615b00c42da1e Johnson Wang 2022-06-07  162  	/* scale up: set voltage first then freq. */
b615b00c42da1e Johnson Wang 2022-06-07  163  	target_voltage = max(inter_voltage, voltage);
b615b00c42da1e Johnson Wang 2022-06-07  164  	if (pre_voltage <= target_voltage) {
b615b00c42da1e Johnson Wang 2022-06-07  165  		ret = mtk_ccifreq_set_voltage(drv, target_voltage);
b615b00c42da1e Johnson Wang 2022-06-07  166  		if (ret) {
b615b00c42da1e Johnson Wang 2022-06-07  167  			dev_err(dev, "failed to scale up voltage\n");
b615b00c42da1e Johnson Wang 2022-06-07  168  			goto out_restore_voltage;
b615b00c42da1e Johnson Wang 2022-06-07  169  		}
b615b00c42da1e Johnson Wang 2022-06-07  170  	}
b615b00c42da1e Johnson Wang 2022-06-07  171  
b615b00c42da1e Johnson Wang 2022-06-07  172  	/* switch the cci clock to intermediate clock source. */
b615b00c42da1e Johnson Wang 2022-06-07  173  	ret = clk_set_parent(drv->cci_clk, drv->inter_clk);
b615b00c42da1e Johnson Wang 2022-06-07  174  	if (ret) {
b615b00c42da1e Johnson Wang 2022-06-07  175  		dev_err(dev, "failed to re-parent cci clock\n");
b615b00c42da1e Johnson Wang 2022-06-07  176  		goto out_restore_voltage;
b615b00c42da1e Johnson Wang 2022-06-07  177  	}
b615b00c42da1e Johnson Wang 2022-06-07  178  
b615b00c42da1e Johnson Wang 2022-06-07  179  	/* set the original clock to target rate. */
b615b00c42da1e Johnson Wang 2022-06-07  180  	ret = clk_set_rate(cci_pll, *freq);
b615b00c42da1e Johnson Wang 2022-06-07  181  	if (ret) {
b615b00c42da1e Johnson Wang 2022-06-07  182  		dev_err(dev, "failed to set cci pll rate: %d\n", ret);
b615b00c42da1e Johnson Wang 2022-06-07  183  		clk_set_parent(drv->cci_clk, cci_pll);
b615b00c42da1e Johnson Wang 2022-06-07  184  		goto out_restore_voltage;
b615b00c42da1e Johnson Wang 2022-06-07  185  	}
b615b00c42da1e Johnson Wang 2022-06-07  186  
b615b00c42da1e Johnson Wang 2022-06-07  187  	/* switch the cci clock back to the original clock source. */
b615b00c42da1e Johnson Wang 2022-06-07  188  	ret = clk_set_parent(drv->cci_clk, cci_pll);
b615b00c42da1e Johnson Wang 2022-06-07  189  	if (ret) {
b615b00c42da1e Johnson Wang 2022-06-07  190  		dev_err(dev, "failed to re-parent cci clock\n");
b615b00c42da1e Johnson Wang 2022-06-07  191  		mtk_ccifreq_set_voltage(drv, inter_voltage);
b615b00c42da1e Johnson Wang 2022-06-07  192  		goto out_unlock;
b615b00c42da1e Johnson Wang 2022-06-07  193  	}
b615b00c42da1e Johnson Wang 2022-06-07  194  
b615b00c42da1e Johnson Wang 2022-06-07  195  	/*
b615b00c42da1e Johnson Wang 2022-06-07  196  	 * If the new voltage is lower than the intermediate voltage or the
b615b00c42da1e Johnson Wang 2022-06-07  197  	 * original voltage, scale down to the new voltage.
b615b00c42da1e Johnson Wang 2022-06-07  198  	 */
b615b00c42da1e Johnson Wang 2022-06-07  199  	if (voltage < inter_voltage || voltage < pre_voltage) {
b615b00c42da1e Johnson Wang 2022-06-07  200  		ret = mtk_ccifreq_set_voltage(drv, voltage);
b615b00c42da1e Johnson Wang 2022-06-07  201  		if (ret) {
b615b00c42da1e Johnson Wang 2022-06-07  202  			dev_err(dev, "failed to scale down voltage\n");
b615b00c42da1e Johnson Wang 2022-06-07  203  			goto out_unlock;
b615b00c42da1e Johnson Wang 2022-06-07  204  		}
b615b00c42da1e Johnson Wang 2022-06-07  205  	}
b615b00c42da1e Johnson Wang 2022-06-07  206  
b615b00c42da1e Johnson Wang 2022-06-07  207  	drv->pre_freq = *freq;
b615b00c42da1e Johnson Wang 2022-06-07  208  	mutex_unlock(&drv->reg_lock);
b615b00c42da1e Johnson Wang 2022-06-07  209  
b615b00c42da1e Johnson Wang 2022-06-07  210  	return 0;
b615b00c42da1e Johnson Wang 2022-06-07  211  
b615b00c42da1e Johnson Wang 2022-06-07  212  out_restore_voltage:
b615b00c42da1e Johnson Wang 2022-06-07  213  	mtk_ccifreq_set_voltage(drv, pre_voltage);
b615b00c42da1e Johnson Wang 2022-06-07  214  
b615b00c42da1e Johnson Wang 2022-06-07  215  out_unlock:
b615b00c42da1e Johnson Wang 2022-06-07  216  	mutex_unlock(&drv->reg_lock);
b615b00c42da1e Johnson Wang 2022-06-07  217  	return ret;
b615b00c42da1e Johnson Wang 2022-06-07  218  }
b615b00c42da1e Johnson Wang 2022-06-07  219  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)
Date: Tue, 12 Jul 2022 17:02:55 +0300	[thread overview]
Message-ID: <202207110939.SC3SbyPy-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2210 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   f2528c29385819a84480cacef4886b049761e2c5
commit: b615b00c42da1ea59aefbd6c98b08b1afabb9d1e [5859/8914] PM / devfreq: mediatek: Introduce MediaTek CCI devfreq driver
config: microblaze-randconfig-m031-20220706 (https://download.01.org/0day-ci/archive/20220711/202207110939.SC3SbyPy-lkp(a)intel.com/config)
compiler: microblaze-linux-gcc (GCC) 11.3.0

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

smatch warnings:
drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)

vim +/drv +135 drivers/devfreq/mtk-cci-devfreq.c

b615b00c42da1e Johnson Wang 2022-06-07  126  static int mtk_ccifreq_target(struct device *dev, unsigned long *freq,
b615b00c42da1e Johnson Wang 2022-06-07  127  			      u32 flags)
b615b00c42da1e Johnson Wang 2022-06-07  128  {
b615b00c42da1e Johnson Wang 2022-06-07  129  	struct mtk_ccifreq_drv *drv = dev_get_drvdata(dev);
b615b00c42da1e Johnson Wang 2022-06-07 @130  	struct clk *cci_pll = clk_get_parent(drv->cci_clk);
                                                                                     ^^^^^^^^^^^^
Dereference

b615b00c42da1e Johnson Wang 2022-06-07  131  	struct dev_pm_opp *opp;
b615b00c42da1e Johnson Wang 2022-06-07  132  	unsigned long opp_rate;
b615b00c42da1e Johnson Wang 2022-06-07  133  	int voltage, pre_voltage, inter_voltage, target_voltage, ret;
b615b00c42da1e Johnson Wang 2022-06-07  134  
b615b00c42da1e Johnson Wang 2022-06-07 @135  	if (!drv)
                                                    ^^^^
Too late!

b615b00c42da1e Johnson Wang 2022-06-07  136  		return -EINVAL;
b615b00c42da1e Johnson Wang 2022-06-07  137  
b615b00c42da1e Johnson Wang 2022-06-07  138  	if (drv->pre_freq == *freq)
b615b00c42da1e Johnson Wang 2022-06-07  139  		return 0;
b615b00c42da1e Johnson Wang 2022-06-07  140  
b615b00c42da1e Johnson Wang 2022-06-07  141  	inter_voltage = drv->inter_voltage;

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

             reply	other threads:[~2022-07-11  1:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-11  1:31 kernel test robot [this message]
2022-07-12 14:02 ` [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130) Dan Carpenter

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=202207110939.SC3SbyPy-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.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.