CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Krzysztof Kozlowski <[email protected]>
tree: https://github.com/krzk/linux n/qcom-ufs-opp-v2 head: bf7d30c9329c87f06dff42b303a9bcfd2e1f54eb commit: be46c855d54f763bfb95424e5204fe7496e2ee5f [14/16] PM: opp: allow control of multiple clocks :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: arm-randconfig-c002-20220414 (https://download.01.org/0day-ci/archive/20220414/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 6b7e6ea489f6dd45a9b0da9ac20871560917b9b0) 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 arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/krzk/linux/commit/be46c855d54f763bfb95424e5204fe7496e2ee5f git remote add krzk-github https://github.com/krzk/linux git fetch --no-tags krzk-github n/qcom-ufs-opp-v2 git checkout be46c855d54f763bfb95424e5204fe7496e2ee5f # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~ ~~~~~~~~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 29 warnings generated. Suppressed 29 warnings (29 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 29 warnings generated. Suppressed 29 warnings (29 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 29 warnings generated. Suppressed 29 warnings (29 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 30 warnings generated. drivers/counter/microchip-tcb-capture.c:337:3: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] snprintf(clk_name, sizeof(clk_name), "t%d_clk", channel); ^~~~~~~~ drivers/counter/microchip-tcb-capture.c:337:3: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 snprintf(clk_name, sizeof(clk_name), "t%d_clk", channel); ^~~~~~~~ Suppressed 29 warnings (29 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 32 warnings generated. lib/test_meminit.c:55:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memset(&p[i], GARBAGE_BYTE, size); ^~~~~~ lib/test_meminit.c:55:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 memset(&p[i], GARBAGE_BYTE, size); ^~~~~~ lib/test_meminit.c:245:4: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(buf_copy, buf, size); ^~~~~~ lib/test_meminit.c:245:4: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(buf_copy, buf, size); ^~~~~~ lib/test_meminit.c:297:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(buf_contents, buf, size); ^~~~~~ lib/test_meminit.c:297:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(buf_contents, buf, size); ^~~~~~ Suppressed 29 warnings (29 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 41 warnings generated. Suppressed 41 warnings (41 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 45 warnings generated. drivers/opp/core.c:914:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(data->old_opp.supplies, old_opp->supplies, size); ^~~~~~ drivers/opp/core.c:914:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(data->old_opp.supplies, old_opp->supplies, size); ^~~~~~ drivers/opp/core.c:915:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(data->new_opp.supplies, opp->supplies, size); ^~~~~~ drivers/opp/core.c:915:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(data->new_opp.supplies, opp->supplies, size); ^~~~~~ >> drivers/opp/core.c:1215:2: warning: Undefined or garbage value returned to >> caller [clang-analyzer-core.uninitialized.UndefReturn] return ret; ^ ~~~ drivers/opp/core.c:1160:2: note: 'ret' declared without an initial value int ret; ^~~~~~~ drivers/opp/core.c:1163:2: note: Taking false branch if (IS_ERR(opp_table)) { ^ drivers/opp/core.c:1168:6: note: Assuming 'target_freq' is not equal to 0 if (target_freq) { ^~~~~~~~~~~ drivers/opp/core.c:1168:2: note: Taking true branch if (target_freq) { ^ drivers/opp/core.c:1176:7: note: Assuming the condition is true if (!_get_opp_count(opp_table)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/opp/core.c:1176:3: note: Taking true branch if (!_get_opp_count(opp_table)) { ^ drivers/opp/core.c:1177:8: note: Assuming field 'clks' is null if (opp_table->clks) ^~~~~~~~~~~~~~~ drivers/opp/core.c:1177:4: note: Taking false branch if (opp_table->clks) ^ drivers/opp/core.c:1181:4: note: Control jumps to line 1214 goto put_opp_table; ^ drivers/opp/core.c:1215:2: note: Undefined or garbage value returned to caller return ret; ^ ~~~ Suppressed 42 warnings (41 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 19 warnings generated. drivers/opp/of.c:586:3: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] snprintf(name, sizeof(name), "opp-microvolt-%s", ^~~~~~~~ drivers/opp/of.c:586:3: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 snprintf(name, sizeof(name), "opp-microvolt-%s", ^~~~~~~~ drivers/opp/of.c:593:3: warning: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] sprintf(name, "opp-microvolt"); ^~~~~~~ drivers/opp/of.c:593:3: note: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 sprintf(name, "opp-microvolt"); ^~~~~~~ drivers/opp/of.c:649:3: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] snprintf(name, sizeof(name), "opp-microamp-%s", ^~~~~~~~ drivers/opp/of.c:649:3: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 snprintf(name, sizeof(name), "opp-microamp-%s", ^~~~~~~~ drivers/opp/of.c:656:3: warning: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] sprintf(name, "opp-microamp"); ^~~~~~~ drivers/opp/of.c:656:3: note: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 sprintf(name, "opp-microamp"); ^~~~~~~ drivers/opp/of.c:693:2: warning: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] sprintf(name, "opp-microwatt"); ^~~~~~~ drivers/opp/of.c:693:2: note: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 sprintf(name, "opp-microwatt"); ^~~~~~~ Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 46 warnings generated. drivers/clk/clk-si5341.c:691:2: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = si5341_encode_44_32(synth->data->regmap, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-si5341.c:691:2: note: Value stored to 'err' is never read err = si5341_encode_44_32(synth->data->regmap, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-si5341.c:856:23: warning: Division by zero [clang-analyzer-core.DivideZero] rate = *parent_rate / (r << 1); ~~~~~~~~~~~~~^~~~~~~~~~ drivers/clk/clk-si5341.c:835:6: note: Assuming 'rate' is not equal to 0 if (!rate) ^~~~~ drivers/clk/clk-si5341.c:835:2: note: Taking false branch if (!rate) ^ drivers/clk/clk-si5341.c:841:6: note: Assuming 'r' is 0 if (r && !(r % rate)) ^ drivers/clk/clk-si5341.c:841:8: note: Left side of '&&' is false if (r && !(r % rate)) ^ drivers/clk/clk-si5341.c:844:6: note: Assuming the condition is false if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-si5341.c:844:2: note: Taking false branch if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT) { ^ drivers/clk/clk-si5341.c:856:23: note: Division by zero rate = *parent_rate / (r << 1); vim +1215 drivers/opp/core.c 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1143 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1144 /** 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1145 * dev_pm_opp_set_rate() - Configure new OPP based on frequency 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1146 * @dev: device for which we do this operation 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1147 * @target_freq: frequency to achieve 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1148 * 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1149 * This configures the power-supplies to the levels specified by the OPP 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1150 * corresponding to the target_freq, and programs the clock to a value <= 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1151 * target_freq, as rounded by clk_round_rate(). Device wanting to run at fmax 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1152 * provided by the opp, should have already rounded to the target OPP's 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1153 * frequency. 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1154 */ 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1155 int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1156 { 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1157 struct opp_table *opp_table; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1158 unsigned long freq = 0, temp_freq; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1159 struct dev_pm_opp *opp = NULL; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1160 int ret; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1161 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1162 opp_table = _find_opp_table(dev); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1163 if (IS_ERR(opp_table)) { 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1164 dev_err(dev, "%s: device's opp table doesn't exist\n", __func__); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1165 return PTR_ERR(opp_table); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1166 } 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1167 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1168 if (target_freq) { 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1169 /* 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1170 * For IO devices which require an OPP on some platforms/SoCs 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1171 * while just needing to scale the clock on some others 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1172 * we look for empty OPP tables with just a clock handle and 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1173 * scale only the clk. This makes dev_pm_opp_set_rate() 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1174 * equivalent to a clk_set_rate() 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1175 */ 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1176 if (!_get_opp_count(opp_table)) { be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1177 if (opp_table->clks) be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1178 ret = _generic_set_opp_clk_only(dev, be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1179 opp_table->clks[0], be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1180 target_freq); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1181 goto put_opp_table; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1182 } 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1183 be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1184 if (opp_table->clks) be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1185 freq = clk_round_rate(opp_table->clks[0], target_freq); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1186 if ((long)freq <= 0) 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1187 freq = target_freq; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1188 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1189 /* 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1190 * The clock driver may support finer resolution of the 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1191 * frequencies than the OPP table, don't update the frequency we 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1192 * pass to clk_set_rate() here. 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1193 */ 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1194 temp_freq = freq; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1195 opp = _find_freq_ceil(opp_table, &temp_freq); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1196 if (IS_ERR(opp)) { 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1197 ret = PTR_ERR(opp); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1198 dev_err(dev, "%s: failed to find OPP for freq %lu (%d)\n", 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1199 __func__, freq, ret); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1200 goto put_opp_table; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1201 } be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1202 /* be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1203 * opp->rates are used for scaling clocks, so be sure accurate be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1204 * 'freq' is used, instead what was defined via e.g. Devicetree. be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1205 */ be46c855d54f76 drivers/opp/core.c Krzysztof Kozlowski 2022-04-05 1206 opp->rates[0] = freq; 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1207 } 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1208 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1209 ret = _set_opp(dev, opp_table, opp, freq); 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1210 386ba854d9f316 drivers/opp/core.c Viresh Kumar 2021-01-21 1211 if (target_freq) 8a31d9d94297b1 drivers/base/power/opp/core.c Viresh Kumar 2017-01-23 1212 dev_pm_opp_put(opp); 052c6f19141dd1 drivers/base/power/opp/core.c Viresh Kumar 2017-01-23 1213 put_opp_table: 5b650b388844f2 drivers/base/power/opp/core.c Viresh Kumar 2017-01-23 1214 dev_pm_opp_put_opp_table(opp_table); 052c6f19141dd1 drivers/base/power/opp/core.c Viresh Kumar 2017-01-23 @1215 return ret; 6a0712f6f199e7 drivers/base/power/opp/core.c Viresh Kumar 2016-02-09 1216 } 6a0712f6f199e7 drivers/base/power/opp/core.c Viresh Kumar 2016-02-09 1217 EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate); 6a0712f6f199e7 drivers/base/power/opp/core.c Viresh Kumar 2016-02-09 1218 :::::: The code at line 1215 was first introduced by commit :::::: 052c6f19141dd13f266cc465fde6f38ddc93d5fb PM / OPP: Move away from RCU locking :::::: TO: Viresh Kumar <[email protected]> :::::: CC: Rafael J. Wysocki <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
