CC: [email protected] CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Andy Shevchenko <[email protected]> TO: Andy Shevchenko <[email protected]> TO: Marc Zyngier <[email protected]> TO: Matti Vaittinen <[email protected]>, Matti Vaittinen <[email protected]> TO: Sergio Paracuellos <[email protected]> TO: Chunyan Zhang <[email protected]> TO: Bartosz Golaszewski <[email protected]> TO: Baruch Siach <[email protected]> TO: "Uwe Kleine-König" <[email protected]> TO: Tony Lindgren <[email protected]> TO: Nicolas Saenz Julienne <[email protected]>
Hi Andy, I love your patch! Perhaps something to improve: [auto build test WARNING on thierry-reding-pwm/for-next] [also build test WARNING on rockchip/for-next v5.16-rc4] [cannot apply to linusw-gpio/for-next next-20211206] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Andy-Shevchenko/gpio-Get-rid-of-duplicate-of_node-assignment-in-the-drivers/20211203-051909 base: https://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm.git for-next :::::: branch date: 4 days ago :::::: commit date: 4 days ago config: arm-randconfig-c002-20211205 (https://download.01.org/0day-ci/archive/20211207/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 6e8678903523019903222e4521a5e41af743cab0) 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/0day-ci/linux/commit/884ea5e4f18badef51842fc948d3b4f0fa538b06 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Andy-Shevchenko/gpio-Get-rid-of-duplicate-of_node-assignment-in-the-drivers/20211203-051909 git checkout 884ea5e4f18badef51842fc948d3b4f0fa538b06 # 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 >>) if (!(condition)) \ ^ drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2729:7: note: Loop condition is false. Exiting loop FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), ^ include/linux/bitfield.h:108:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:52:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG((_mask) > (typeof(_reg))~0ull, \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:307:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2729:7: note: Assuming the condition is false FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), ^ include/linux/bitfield.h:108:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/bitfield.h:54:3: note: expanded from macro '__BF_FIELD_CHECK' __BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:21:15: note: expanded from macro '__BUILD_BUG_ON_NOT_POWER_OF_2' BUILD_BUG_ON(((n) & ((n) - 1)) != 0) ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:22: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler_types.h:323:23: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler_types.h:315:9: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^~~~~~~~~ drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2729:7: note: Taking false branch FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), ^ include/linux/bitfield.h:108:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:54:3: note: expanded from macro '__BF_FIELD_CHECK' __BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \ ^ include/linux/build_bug.h:21:2: note: expanded from macro '__BUILD_BUG_ON_NOT_POWER_OF_2' BUILD_BUG_ON(((n) & ((n) - 1)) != 0) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:315:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2729:7: note: Loop condition is false. Exiting loop FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), ^ include/linux/bitfield.h:108:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:54:3: note: expanded from macro '__BF_FIELD_CHECK' __BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \ ^ include/linux/build_bug.h:21:2: note: expanded from macro '__BUILD_BUG_ON_NOT_POWER_OF_2' BUILD_BUG_ON(((n) & ((n) - 1)) != 0) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:307:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2729:7: note: The left operand of '&' is a garbage value FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), ^ include/linux/bitfield.h:109:27: note: expanded from macro 'FIELD_GET' (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \ ~~~~ ^ 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 with check filters). 2 warnings generated. >> drivers/gpio/gpio-rda.c:200:22: warning: Value stored to 'np' during its >> initialization is never read [clang-analyzer-deadcode.DeadStores] struct device_node *np = pdev->dev.of_node; ^~ ~~~~~~~~~~~~~~~~~ drivers/gpio/gpio-rda.c:200:22: note: Value stored to 'np' during its initialization is never read struct device_node *np = pdev->dev.of_node; ^~ ~~~~~~~~~~~~~~~~~ Suppressed 1 warnings (1 with check filters). 2 warnings generated. drivers/misc/enclosure.c:186:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(name, "enclosure_device:"); ^~~~~~ drivers/misc/enclosure.c:186:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(name, "enclosure_device:"); ^~~~~~ drivers/misc/enclosure.c:187:2: warning: Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcat(name, dev_name(&cdev->cdev)); ^~~~~~ drivers/misc/enclosure.c:187:2: note: Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 strcat(name, dev_name(&cdev->cdev)); ^~~~~~ 1 warning generated. drivers/misc/gehc-achc.c:152:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn] return ret; ^ ~~~ drivers/misc/gehc-achc.c:142:2: note: 'ret' declared without an initial value int ret; ^~~~~~~ drivers/misc/gehc-achc.c:145:14: note: Assuming 'i' is >= 'retries' for (i = 0; i < retries; i++) { ^~~~~~~~~~~ drivers/misc/gehc-achc.c:145:2: note: Loop condition is false. Execution continues on line 152 for (i = 0; i < retries; i++) { ^ drivers/misc/gehc-achc.c:152:2: note: Undefined or garbage value returned to caller return ret; ^ ~~~ 1 warning generated. drivers/misc/eeprom/at25.c:467:44: warning: The left operand of '&' is a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult] at25->nvmem_config.read_only = chip.flags & EE_READONLY; ~~~~~~~~~~ ^ drivers/misc/eeprom/at25.c:389:6: note: Assuming 'match' is non-null if (match && !strcmp(match->compatible, "cypress,fm25")) ^~~~~ drivers/misc/eeprom/at25.c:389:6: note: Left side of '&&' is true drivers/misc/eeprom/at25.c:389:2: note: Taking true branch if (match && !strcmp(match->compatible, "cypress,fm25")) ^ drivers/misc/eeprom/at25.c:393:6: note: Assuming field 'platform_data' is null if (!spi->dev.platform_data) { ^~~~~~~~~~~~~~~~~~~~~~~ drivers/misc/eeprom/at25.c:393:2: note: Taking true branch if (!spi->dev.platform_data) { ^ drivers/misc/eeprom/at25.c:394:8: note: 'is_fram' is true if (!is_fram) { ^~~~~~~ drivers/misc/eeprom/at25.c:394:3: note: Taking false branch if (!is_fram) { ^ drivers/misc/eeprom/at25.c:407:6: note: 'sr' is >= 0 if (sr < 0 || sr & AT25_SR_nRDY) { ^~ drivers/misc/eeprom/at25.c:407:6: note: Left side of '||' is false drivers/misc/eeprom/at25.c:407:16: note: Assuming the condition is false if (sr < 0 || sr & AT25_SR_nRDY) { ^~~~~~~~~~~~~~~~~ drivers/misc/eeprom/at25.c:407:2: note: Taking false branch if (sr < 0 || sr & AT25_SR_nRDY) { ^ drivers/misc/eeprom/at25.c:413:6: note: Assuming 'at25' is non-null if (!at25) ^~~~~ drivers/misc/eeprom/at25.c:413:2: note: Taking false branch if (!at25) ^ drivers/misc/eeprom/at25.c:416:2: note: Loop condition is false. Exiting loop mutex_init(&at25->lock); ^ include/linux/mutex.h:101:32: note: expanded from macro 'mutex_init' #define mutex_init(mutex) \ ^ drivers/misc/eeprom/at25.c:421:6: note: 'is_fram' is true if (is_fram) { ^~~~~~~ drivers/misc/eeprom/at25.c:421:2: note: Taking true branch if (is_fram) { ^ drivers/misc/eeprom/at25.c:424:7: note: Assuming the condition is false if (id[6] != 0xc2) { ^~~~~~~~~~~~~ drivers/misc/eeprom/at25.c:424:3: note: Taking false branch if (id[6] != 0xc2) { ^ drivers/misc/eeprom/at25.c:430:7: note: Assuming the condition is false if (id[7] < 0x21 || id[7] > 0x26) { ^~~~~~~~~~~~ drivers/misc/eeprom/at25.c:430:7: note: Left side of '||' is false drivers/misc/eeprom/at25.c:430:23: note: Assuming the condition is false if (id[7] < 0x21 || id[7] > 0x26) { ^~~~~~~~~~~~ drivers/misc/eeprom/at25.c:430:3: note: Taking false branch vim +/np +200 drivers/gpio/gpio-rda.c d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 197 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 198 static int rda_gpio_probe(struct platform_device *pdev) d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 199 { d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 @200 struct device_node *np = pdev->dev.of_node; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 201 struct device *dev = &pdev->dev; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 202 struct gpio_irq_chip *girq; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 203 struct rda_gpio *rda_gpio; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 204 u32 ngpios; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 205 int ret; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 206 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 207 rda_gpio = devm_kzalloc(dev, sizeof(*rda_gpio), GFP_KERNEL); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 208 if (!rda_gpio) d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 209 return -ENOMEM; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 210 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 211 ret = device_property_read_u32(dev, "ngpios", &ngpios); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 212 if (ret < 0) d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 213 return ret; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 214 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 215 /* d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 216 * Not all ports have interrupt capability. For instance, on d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 217 * RDA8810PL, GPIOC doesn't support interrupt. So we must handle d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 218 * those also. d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 219 */ d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 220 rda_gpio->irq = platform_get_irq(pdev, 0); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 221 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 222 rda_gpio->base = devm_platform_ioremap_resource(pdev, 0); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 223 if (IS_ERR(rda_gpio->base)) d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 224 return PTR_ERR(rda_gpio->base); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 225 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 226 spin_lock_init(&rda_gpio->lock); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 227 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 228 ret = bgpio_init(&rda_gpio->chip, dev, 4, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 229 rda_gpio->base + RDA_GPIO_VAL, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 230 rda_gpio->base + RDA_GPIO_SET, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 231 rda_gpio->base + RDA_GPIO_CLR, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 232 rda_gpio->base + RDA_GPIO_OEN_SET_OUT, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 233 rda_gpio->base + RDA_GPIO_OEN_SET_IN, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 234 BGPIOF_READ_OUTPUT_REG_SET); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 235 if (ret) { d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 236 dev_err(dev, "bgpio_init failed\n"); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 237 return ret; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 238 } d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 239 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 240 rda_gpio->chip.label = dev_name(dev); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 241 rda_gpio->chip.ngpio = ngpios; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 242 rda_gpio->chip.base = -1; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 243 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 244 if (rda_gpio->irq >= 0) { d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 245 rda_gpio->irq_chip.name = "rda-gpio", d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 246 rda_gpio->irq_chip.irq_ack = rda_gpio_irq_ack, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 247 rda_gpio->irq_chip.irq_mask = rda_gpio_irq_mask, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 248 rda_gpio->irq_chip.irq_unmask = rda_gpio_irq_unmask, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 249 rda_gpio->irq_chip.irq_set_type = rda_gpio_irq_set_type, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 250 rda_gpio->irq_chip.flags = IRQCHIP_SKIP_SET_WAKE, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 251 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 252 girq = &rda_gpio->chip.irq; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 253 girq->chip = &rda_gpio->irq_chip; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 254 girq->handler = handle_bad_irq; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 255 girq->default_type = IRQ_TYPE_NONE; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 256 girq->parent_handler = rda_gpio_irq_handler; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 257 girq->parent_handler_data = rda_gpio; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 258 girq->num_parents = 1; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 259 girq->parents = devm_kcalloc(dev, 1, d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 260 sizeof(*girq->parents), d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 261 GFP_KERNEL); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 262 if (!girq->parents) d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 263 return -ENOMEM; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 264 girq->parents[0] = rda_gpio->irq; d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 265 } d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 266 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 267 platform_set_drvdata(pdev, rda_gpio); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 268 d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 269 return devm_gpiochip_add_data(dev, &rda_gpio->chip, rda_gpio); d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 270 } d57eb825e0dc6f Manivannan Sadhasivam 2019-10-21 271 --- 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]
