All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)
@ 2022-07-12 14:02 ` Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-07-11  1:31 UTC (permalink / raw)
  To: kbuild

[-- 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130)
@ 2022-07-12 14:02 ` Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2022-07-12 14:02 UTC (permalink / raw)
  To: kbuild-all

[-- 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-07-12 14:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-11  1:31 [linux-next:master 5859/8914] drivers/devfreq/mtk-cci-devfreq.c:135 mtk_ccifreq_target() warn: variable dereferenced before check 'drv' (see line 130) kernel test robot
2022-07-12 14:02 ` Dan Carpenter

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.