CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: linux-ker...@vger.kernel.org TO: Hans de Goede <hdego...@redhat.com> CC: Andy Shevchenko <andriy.shevche...@linux.intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: be2d3ecedd9911fbfd7e55cc9ceac5f8b79ae4cf commit: 689e008877402564ce8a7884f21c9d2ed3ecb2dc pinctrl: baytrail: Clear direct_irq_en flag on broken configs date: 10 weeks ago :::::: branch date: 6 hours ago :::::: commit date: 10 weeks ago config: x86_64-randconfig-c007-20220328 (https://download.01.org/0day-ci/archive/20220403/202204031048.x4kpy9wq-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0f6d9501cf49ce02937099350d08f20c4af86f3d) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=689e008877402564ce8a7884f21c9d2ed3ecb2dc git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 689e008877402564ce8a7884f21c9d2ed3ecb2dc # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:326:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ include/linux/list.h:37:2: note: Loop condition is false. Exiting loop WRITE_ONCE(list->next, list); ^ include/asm-generic/rwonce.h:60:2: note: expanded from macro 'WRITE_ONCE' compiletime_assert_rwonce_type(x); \ ^ include/asm-generic/rwonce.h:36:2: note: expanded from macro 'compiletime_assert_rwonce_type' compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:318:2: note: expanded from macro '__compiletime_assert' do { \ ^ include/linux/list.h:37:2: note: Use of memory after it is freed WRITE_ONCE(list->next, list); ^ include/asm-generic/rwonce.h:61:2: note: expanded from macro 'WRITE_ONCE' __WRITE_ONCE(x, val); \ ^~~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:55:30: note: expanded from macro '__WRITE_ONCE' *(volatile typeof(x) *)&(x) = (val); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ include/linux/list.h:137:13: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] __list_del(entry->prev, entry->next); ^ fs/btrfs/block-group.c:3895:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3899:3: note: Calling 'btrfs_put_caching_control' btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:382:2: note: Taking true branch if (refcount_dec_and_test(&ctl->count)) ^ fs/btrfs/block-group.c:383:3: note: Memory is released kfree(ctl); ^~~~~~~~~~ fs/btrfs/block-group.c:3899:3: note: Returning; memory was released via 1st parameter btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:3895:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3898:3: note: Calling 'list_del' list_del(&caching_ctl->list); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:148:2: note: Calling '__list_del_entry' __list_del_entry(entry); ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:6: note: Assuming the condition is false if (!__list_del_entry_valid(entry)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:2: note: Taking false branch if (!__list_del_entry_valid(entry)) ^ include/linux/list.h:137:13: note: Use of memory after it is freed __list_del(entry->prev, entry->next); ^~~~~~~~~~~ include/linux/list.h:149:14: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] entry->next = LIST_POISON1; ^ fs/btrfs/block-group.c:3895:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3899:3: note: Calling 'btrfs_put_caching_control' btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:382:2: note: Taking true branch if (refcount_dec_and_test(&ctl->count)) ^ fs/btrfs/block-group.c:383:3: note: Memory is released kfree(ctl); ^~~~~~~~~~ fs/btrfs/block-group.c:3899:3: note: Returning; memory was released via 1st parameter btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:3895:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3898:3: note: Calling 'list_del' list_del(&caching_ctl->list); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:149:14: note: Use of memory after it is freed entry->next = LIST_POISON1; ~~~~~~~~~~~ ^ Suppressed 2 warnings (2 with check filters). 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. >> drivers/pinctrl/intel/pinctrl-baytrail.c:1483:2: warning: Value stored to >> 'direct_irq' is never read [clang-analyzer-deadcode.DeadStores] direct_irq = match - direct_irq_mux; ^ ~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-baytrail.c:1483:2: note: Value stored to 'direct_irq' is never read direct_irq = match - direct_irq_mux; ^ ~~~~~~~~~~~~~~~~~~~~~~ >> drivers/pinctrl/intel/pinctrl-baytrail.c:1485:2: warning: Value stored to >> 'ioapic_direct_irq_base' is never read [clang-analyzer-deadcode.DeadStores] ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-baytrail.c:1485:2: note: Value stored to 'ioapic_direct_irq_base' is never read ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. drivers/pinctrl/intel/pinctrl-cherryview.c:1063:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = pctrl->dev; ^~~ ~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-cherryview.c:1063:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = pctrl->dev; ^~~ ~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-cherryview.c:1307:18: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = pctrl->dev; ^~~ ~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-cherryview.c:1307:18: note: Value stored to 'dev' during its initialization is never read struct device *dev = pctrl->dev; ^~~ ~~~~~~~~~~ 2 warnings generated. arch/x86/kernel/kvm.c:339:7: warning: Value stored to 'pa' during its initialization is never read [clang-analyzer-deadcode.DeadStores] u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason)); ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/kvm.c:339:7: note: Value stored to 'pa' during its initialization is never read u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason)); ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 1 warnings (1 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. 6 warnings generated. drivers/regulator/ltc3676.c:76:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:76:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:77:6: warning: Value stored to 'dcdc' during its initialization is never read [clang-analyzer-deadcode.DeadStores] int dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ drivers/regulator/ltc3676.c:77:6: note: Value stored to 'dcdc' during its initialization is never read int dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ drivers/regulator/ltc3676.c:94:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:94:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:96:6: warning: Value stored to 'dcdc' during its initialization is never read [clang-analyzer-deadcode.DeadStores] int dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ drivers/regulator/ltc3676.c:96:6: note: Value stored to 'dcdc' during its initialization is never read int dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ drivers/regulator/ltc3676.c:121:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:121:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = ltc3676->dev; ^~~ ~~~~~~~~~~~~ drivers/regulator/ltc3676.c:122:11: warning: Value stored to 'dcdc' during its initialization is never read [clang-analyzer-deadcode.DeadStores] int ret, dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ drivers/regulator/ltc3676.c:122:11: note: Value stored to 'dcdc' during its initialization is never read int ret, dcdc = rdev_get_id(rdev); ^~~~ ~~~~~~~~~~~~~~~~~ 1 warning generated. Suppressed 1 warnings (1 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. 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. drivers/mfd/twl-core.c:1205:8: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign] temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \ ~~~~ ^ drivers/mfd/twl-core.c:1078:6: note: Assuming 'node' is non-null if (!node && !pdata) { ^~~~~ drivers/mfd/twl-core.c:1078:12: note: Left side of '&&' is false if (!node && !pdata) { ^ drivers/mfd/twl-core.c:1083:6: note: Assuming 'twl_priv' is null if (twl_priv) { ^~~~~~~~ drivers/mfd/twl-core.c:1083:2: note: Taking false branch if (twl_priv) { ^ drivers/mfd/twl-core.c:1090:6: note: Assuming 'pdev' is non-null if (!pdev) { ^~~~~ drivers/mfd/twl-core.c:1090:2: note: Taking false branch if (!pdev) { ^ drivers/mfd/twl-core.c:1096:6: note: Assuming 'status' is 0 if (status) { ^~~~~~ drivers/mfd/twl-core.c:1096:2: note: Taking false branch if (status) { ^ drivers/mfd/twl-core.c:1101:2: note: Taking false branch if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) { vim +/direct_irq +1483 drivers/pinctrl/intel/pinctrl-baytrail.c 71e6ca61e82667 Cristina Ciocan 2016-04-01 1468 689e0088774025 Hans de Goede 2022-01-12 1469 static bool byt_direct_irq_sanity_check(struct intel_pinctrl *vg, int pin, u32 conf0) 689e0088774025 Hans de Goede 2022-01-12 1470 { 689e0088774025 Hans de Goede 2022-01-12 1471 int direct_irq, ioapic_direct_irq_base; 689e0088774025 Hans de Goede 2022-01-12 1472 u8 *match, direct_irq_mux[16]; 689e0088774025 Hans de Goede 2022-01-12 1473 u32 trig; 689e0088774025 Hans de Goede 2022-01-12 1474 689e0088774025 Hans de Goede 2022-01-12 1475 memcpy_fromio(direct_irq_mux, vg->communities->pad_regs + BYT_DIRECT_IRQ_REG, 689e0088774025 Hans de Goede 2022-01-12 1476 sizeof(direct_irq_mux)); 689e0088774025 Hans de Goede 2022-01-12 1477 match = memchr(direct_irq_mux, pin, sizeof(direct_irq_mux)); 689e0088774025 Hans de Goede 2022-01-12 1478 if (!match) { 689e0088774025 Hans de Goede 2022-01-12 1479 dev_warn(vg->dev, FW_BUG "pin %i: direct_irq_en set but no IRQ assigned, clearing\n", pin); 689e0088774025 Hans de Goede 2022-01-12 1480 return false; 689e0088774025 Hans de Goede 2022-01-12 1481 } 689e0088774025 Hans de Goede 2022-01-12 1482 689e0088774025 Hans de Goede 2022-01-12 @1483 direct_irq = match - direct_irq_mux; 689e0088774025 Hans de Goede 2022-01-12 1484 /* Base IO-APIC pin numbers come from atom-e3800-family-datasheet.pdf */ 689e0088774025 Hans de Goede 2022-01-12 @1485 ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67; 689e0088774025 Hans de Goede 2022-01-12 1486 dev_dbg(vg->dev, "Pin %i: uses direct IRQ %d (IO-APIC %d)\n", pin, 689e0088774025 Hans de Goede 2022-01-12 1487 direct_irq, direct_irq + ioapic_direct_irq_base); 689e0088774025 Hans de Goede 2022-01-12 1488 689e0088774025 Hans de Goede 2022-01-12 1489 /* 689e0088774025 Hans de Goede 2022-01-12 1490 * Testing has shown that the way direct IRQs work is that the combination of the 689e0088774025 Hans de Goede 2022-01-12 1491 * direct-irq-en flag and the direct IRQ mux connect the output of the GPIO's IRQ 689e0088774025 Hans de Goede 2022-01-12 1492 * trigger block, which normally sets the status flag in the IRQ status reg at 689e0088774025 Hans de Goede 2022-01-12 1493 * 0x800, to one of the IO-APIC pins according to the mux registers. 689e0088774025 Hans de Goede 2022-01-12 1494 * 689e0088774025 Hans de Goede 2022-01-12 1495 * This means that: 689e0088774025 Hans de Goede 2022-01-12 1496 * 1. The TRIG_MASK bits must be set to configure the GPIO's IRQ trigger block 689e0088774025 Hans de Goede 2022-01-12 1497 * 2. The TRIG_LVL bit *must* be set, so that the GPIO's input value is directly 689e0088774025 Hans de Goede 2022-01-12 1498 * passed (1:1 or inverted) to the IO-APIC pin, if TRIG_LVL is not set, 689e0088774025 Hans de Goede 2022-01-12 1499 * selecting edge mode operation then on the first edge the IO-APIC pin goes 689e0088774025 Hans de Goede 2022-01-12 1500 * high, but since no write-to-clear write will be done to the IRQ status reg 689e0088774025 Hans de Goede 2022-01-12 1501 * at 0x800, the detected edge condition will never get cleared. 689e0088774025 Hans de Goede 2022-01-12 1502 */ 689e0088774025 Hans de Goede 2022-01-12 1503 trig = conf0 & BYT_TRIG_MASK; 689e0088774025 Hans de Goede 2022-01-12 1504 if (trig != (BYT_TRIG_POS | BYT_TRIG_LVL) && 689e0088774025 Hans de Goede 2022-01-12 1505 trig != (BYT_TRIG_NEG | BYT_TRIG_LVL)) { 689e0088774025 Hans de Goede 2022-01-12 1506 dev_warn(vg->dev, FW_BUG "pin %i: direct_irq_en set without trigger (conf0: %xh), clearing\n", 689e0088774025 Hans de Goede 2022-01-12 1507 pin, conf0); 689e0088774025 Hans de Goede 2022-01-12 1508 return false; 689e0088774025 Hans de Goede 2022-01-12 1509 } 689e0088774025 Hans de Goede 2022-01-12 1510 689e0088774025 Hans de Goede 2022-01-12 1511 return true; 689e0088774025 Hans de Goede 2022-01-12 1512 } 689e0088774025 Hans de Goede 2022-01-12 1513 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org