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