CC: [email protected] CC: [email protected] CC: [email protected] TO: Claudiu Beznea <[email protected]> CC: Stephen Boyd <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 4f0dda359c4563cbb1b0f97b0dbbcdc553156541 commit: 7029db09b2025f863f191b3d5b1d7859a5e26a8d clk: at91: clk-master: add notifier for divider date: 5 weeks ago :::::: branch date: 3 hours ago :::::: commit date: 5 weeks ago config: arm-randconfig-c002-20211114 (https://download.01.org/0day-ci/archive/20211128/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project c3dddeeafb529e769cde87bd29ef6271ac6bfa5c) 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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7029db09b2025f863f191b3d5b1d7859a5e26a8d git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 7029db09b2025f863f191b3d5b1d7859a5e26a8d # 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 >>) drivers/pinctrl/stm32/pinctrl-stm32.c:1465:7: note: Assuming the condition is false if (hwlock_id == -EPROBE_DEFER) ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1465:3: note: Taking false branch if (hwlock_id == -EPROBE_DEFER) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1471:2: note: Loop condition is false. Exiting loop spin_lock_init(&pctl->irqmux_lock); ^ include/linux/spinlock.h:353:34: note: expanded from macro 'spin_lock_init' # define spin_lock_init(_lock) \ ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1481:6: note: Assuming field 'pins' is non-null if (!pctl->pins) ^~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1481:2: note: Taking false branch if (!pctl->pins) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1485:6: note: 'ret' is 0 if (ret) ^~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1485:2: note: Taking false branch if (ret) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1489:6: note: Assuming 'ret' is 0 if (ret) { ^~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1489:2: note: Taking false branch if (ret) { ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1494:6: note: Assuming field 'domain' is non-null if (pctl->domain) { ^~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1494:2: note: Taking true branch if (pctl->domain) { ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1495:9: note: Calling 'stm32_pctrl_dt_setup_irq' ret = stm32_pctrl_dt_setup_irq(pdev, pctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1333:6: note: Calling 'IS_ERR' if (IS_ERR(pctl->regmap)) ^~~~~~~~~~~~~~~~~~~~ include/linux/err.h:36:9: note: Assuming the condition is false return IS_ERR_VALUE((unsigned long)ptr); ^ include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE' #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/err.h:36:2: note: Returning zero, which participates in a condition later return IS_ERR_VALUE((unsigned long)ptr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1333:6: note: Returning from 'IS_ERR' if (IS_ERR(pctl->regmap)) ^~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1333:2: note: Taking false branch if (IS_ERR(pctl->regmap)) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1339:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1339:2: note: Taking false branch if (ret) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1343:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1343:2: note: Taking false branch if (ret) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1348:2: note: Loop condition is true. Entering loop body for (i = 0; i < STM32_GPIO_PINS_PER_BANK; i++) { ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1349:3: note: 'mux' initialized here struct reg_field mux; ^~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/stm32/pinctrl-stm32.c:1355:3: note: Loop condition is false. Exiting loop dev_dbg(dev, "irqmux%d: reg:%#x, lsb:%d, msb:%d\n", ^ include/linux/dev_printk.h:158:2: note: expanded from macro 'dev_dbg' dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__) ^ include/linux/dev_printk.h:128:3: note: expanded from macro 'dev_printk' dev_printk_index_emit(level, fmt); \ ^ include/linux/dev_printk.h:105:2: note: expanded from macro 'dev_printk_index_emit' printk_index_subsys_emit("%s %s: ", level, fmt) ^ include/linux/printk.h:413:2: note: expanded from macro 'printk_index_subsys_emit' __printk_index_emit(fmt, level, subsys_fmt_prefix) ^ include/linux/printk.h:392:34: note: expanded from macro '__printk_index_emit' #define __printk_index_emit(...) do {} while (0) ^ drivers/pinctrl/stm32/pinctrl-stm32.c:1358:21: note: Passed-by-value struct argument contains uninitialized data (e.g., field: 'id_size') pctl->irqmux[i] = devm_regmap_field_alloc(dev, rm, mux); ^ ~~~ 1 warning generated. >> drivers/clk/at91/clk-master.c:197:7: warning: Division by zero >> [clang-analyzer-core.DivideZero] rate /= characteristics->divisors[div_index]; ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:278:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:8: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/irqflags.h:237:36: note: expanded from macro 'local_irq_save' #define local_irq_save(flags) do { raw_local_irq_save(flags); } while (0) ^ include/linux/irqflags.h:169:2: note: expanded from macro 'raw_local_irq_save' do { \ ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:278:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:8: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/irqflags.h:237:31: note: expanded from macro 'local_irq_save' #define local_irq_save(flags) do { raw_local_irq_save(flags); } while (0) ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:278:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:31: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:31:27: note: expanded from macro '__LOCK' do { preempt_disable(); ___LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:28:3: note: expanded from macro '___LOCK' do { __acquire(lock); (void)(lock); } while (0) ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:278:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:31: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:31:3: note: expanded from macro '__LOCK' do { preempt_disable(); ___LOCK(lock); } while (0) ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:278:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:3: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ drivers/clk/at91/clk-master.c:260:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(master_div->lock, flags); ^ include/linux/spinlock.h:393:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ vim +197 drivers/clk/at91/clk-master.c 7a110b9107ed8f Claudiu Beznea 2020-11-19 160 7029db09b2025f Claudiu Beznea 2021-10-11 161 /* This function must be called with lock acquired. */ 7029db09b2025f Claudiu Beznea 2021-10-11 162 static int clk_master_div_set(struct clk_master *master, 7029db09b2025f Claudiu Beznea 2021-10-11 163 unsigned long parent_rate, int div) 7a110b9107ed8f Claudiu Beznea 2020-11-19 164 { 7a110b9107ed8f Claudiu Beznea 2020-11-19 165 const struct clk_master_characteristics *characteristics = 7a110b9107ed8f Claudiu Beznea 2020-11-19 166 master->characteristics; 7029db09b2025f Claudiu Beznea 2021-10-11 167 unsigned long rate = parent_rate; 7029db09b2025f Claudiu Beznea 2021-10-11 168 unsigned int max_div = 0, div_index = 0, max_div_index = 0; 7029db09b2025f Claudiu Beznea 2021-10-11 169 unsigned int i, mckr, tmp; 36971566ea7a51 Claudiu Beznea 2021-10-11 170 int ret; 7a110b9107ed8f Claudiu Beznea 2020-11-19 171 7a110b9107ed8f Claudiu Beznea 2020-11-19 172 for (i = 0; i < ARRAY_SIZE(characteristics->divisors); i++) { 7a110b9107ed8f Claudiu Beznea 2020-11-19 173 if (!characteristics->divisors[i]) 7a110b9107ed8f Claudiu Beznea 2020-11-19 174 break; 7a110b9107ed8f Claudiu Beznea 2020-11-19 175 7029db09b2025f Claudiu Beznea 2021-10-11 176 if (div == characteristics->divisors[i]) 7029db09b2025f Claudiu Beznea 2021-10-11 177 div_index = i; 7029db09b2025f Claudiu Beznea 2021-10-11 178 7029db09b2025f Claudiu Beznea 2021-10-11 179 if (max_div < characteristics->divisors[i]) { 7029db09b2025f Claudiu Beznea 2021-10-11 180 max_div = characteristics->divisors[i]; 7029db09b2025f Claudiu Beznea 2021-10-11 181 max_div_index = i; 7a110b9107ed8f Claudiu Beznea 2020-11-19 182 } 7a110b9107ed8f Claudiu Beznea 2020-11-19 183 } 7a110b9107ed8f Claudiu Beznea 2020-11-19 184 7029db09b2025f Claudiu Beznea 2021-10-11 185 if (div > max_div) 7029db09b2025f Claudiu Beznea 2021-10-11 186 div_index = max_div_index; 7a110b9107ed8f Claudiu Beznea 2020-11-19 187 36971566ea7a51 Claudiu Beznea 2021-10-11 188 ret = regmap_read(master->regmap, master->layout->offset, &mckr); 36971566ea7a51 Claudiu Beznea 2021-10-11 189 if (ret) 7029db09b2025f Claudiu Beznea 2021-10-11 190 return ret; 36971566ea7a51 Claudiu Beznea 2021-10-11 191 a27748adeacab6 Claudiu Beznea 2021-10-11 192 mckr &= master->layout->mask; a27748adeacab6 Claudiu Beznea 2021-10-11 193 tmp = (mckr >> MASTER_DIV_SHIFT) & MASTER_DIV_MASK; 7029db09b2025f Claudiu Beznea 2021-10-11 194 if (tmp == div_index) 7029db09b2025f Claudiu Beznea 2021-10-11 195 return 0; 7029db09b2025f Claudiu Beznea 2021-10-11 196 7029db09b2025f Claudiu Beznea 2021-10-11 @197 rate /= characteristics->divisors[div_index]; 7029db09b2025f Claudiu Beznea 2021-10-11 198 if (rate < characteristics->output.min) 7029db09b2025f Claudiu Beznea 2021-10-11 199 pr_warn("master clk div is underclocked"); 7029db09b2025f Claudiu Beznea 2021-10-11 200 else if (rate > characteristics->output.max) 7029db09b2025f Claudiu Beznea 2021-10-11 201 pr_warn("master clk div is overclocked"); 36971566ea7a51 Claudiu Beznea 2021-10-11 202 36971566ea7a51 Claudiu Beznea 2021-10-11 203 mckr &= ~(MASTER_DIV_MASK << MASTER_DIV_SHIFT); 7029db09b2025f Claudiu Beznea 2021-10-11 204 mckr |= (div_index << MASTER_DIV_SHIFT); 36971566ea7a51 Claudiu Beznea 2021-10-11 205 ret = regmap_write(master->regmap, master->layout->offset, mckr); 36971566ea7a51 Claudiu Beznea 2021-10-11 206 if (ret) 7029db09b2025f Claudiu Beznea 2021-10-11 207 return ret; 36971566ea7a51 Claudiu Beznea 2021-10-11 208 7a110b9107ed8f Claudiu Beznea 2020-11-19 209 while (!clk_master_ready(master)) 7a110b9107ed8f Claudiu Beznea 2020-11-19 210 cpu_relax(); 7029db09b2025f Claudiu Beznea 2021-10-11 211 7029db09b2025f Claudiu Beznea 2021-10-11 212 master->div = characteristics->divisors[div_index]; 7a110b9107ed8f Claudiu Beznea 2020-11-19 213 7a110b9107ed8f Claudiu Beznea 2020-11-19 214 return 0; 7a110b9107ed8f Claudiu Beznea 2020-11-19 215 } 7a110b9107ed8f Claudiu Beznea 2020-11-19 216 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
