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
next 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.